総和と総乗の記号|関数・指数・対数・総和

このページはプロモーション(広告)を含みます。

関数・指数・対数・総和(初級・読む22分+演習30分)

この授業のゴール

仕事でどう使うか

統計量も損失関数も、ほとんどは「たくさんの値を足す」計算です。Σ(シグマ)はそれを短く書く記号で、数式が読めるかどうかの最初の関門になります。

路線 この授業の使いどころ
DS(データサイエンティスト) 平均、分散、売上合計。集計関数(SUM、AVG)が何を足しているかを式で説明する
ML(機械学習エンジニア) 損失関数 $\sum_i (y_i-\hat y_i)^2$(二乗誤差の和)、対数尤度 $\sum_i\ln p_i$。論文の式をコードに写す
DX(DX推進・AI企画) 月次の合計や累計、複数施策の効果の積み上げ(Π)。指標定義書に「何を何件足すか」を式で書く
RS(研究者) 論文の式の読解、推定量の定義。添字の範囲を誤ると結果が変わる

実務では、「合計の範囲は何件か(上限 $n$)」「二乗してから足すのか、足してから二乗するのか」を確認する場面が頻繁にあります。

前提

次の知識を使います。

画面内のPythonで、sum と range を使って同じ計算を確かめます。

身近な状況:3日間の売上を足す

ある店の3日間の売上を $x_1=3$、$x_2=5$、$x_3=10$(万円)とします。添字(そえじ:番号を示す小さな数字)で、$x_i$ は「$i$ 日目の売上」を表します。

日 $i$ 売上 $x_i$(万円)
1 3
2 5
3 10

3日間の合計は $3+5+10=18$ 万円、平均は $18\div3=6$ 万円です。

3日ではなく365日だったら? $x_1+x_2+\cdots+x_{365}$ と書くのは大変です。この「$i$ を1から $n$ まで動かして足す」を1つの記号にしたものが Σ です。一方、複数の期間の成長倍率を掛け合わせるのが Π(パイ) です。

直感的な説明:Σ は「ループして足す」、Π は「ループして掛ける」

Σ は、プログラムの for ループで合計を貯める処理そのものです。

total = 0
for i in 1..n:
    total = total + (i番目の項)

Π も同じで、total = 1 から始めて、各項を掛けていきます。足し算の最初の値は0、掛け算の最初の値は1です(何も足さなければ0、何も掛けなければ1)。

読み方のコツは、小さな値で展開することです。$n=3$ など小さい数で書き下せば、必ず意味が分かります。

正確な定義:Σ と Π の読み方と性質

総和:

$$\sum_{i=1}^{n} a_i = a_1+a_2+\cdots+a_n$$

例:$\sum_{i=1}^{3} i^2=1^2+2^2+3^2=1+4+9=14$。

総乗:

$$\prod_{i=1}^{n} a_i = a_1\times a_2\times\cdots\times a_n$$

例:$\prod_{i=1}^{3}(1+r_i)$ で $r=(0.1,\,-0.1,\,0.2)$ なら $1.1\times0.9\times1.2=1.188$。3期間の成長倍率は1.188で、18.8%増です。

性質($c$ は定数、$a_i,b_i$ は項):

性質 式 数値例($x=3,5,10$)
定数の和 $\sum_{i=1}^{n}c=nc$ $\sum_{i=1}^{3}4=12$
定数倍 $\sum ca_i=c\sum a_i$ $\sum 2x_i=2\times18=36$
和の分解 $\sum(a_i+b_i)=\sum a_i+\sum b_i$ $\sum(2x_i+1)=36+3=39$
平均 $\bar x=\frac1n\sum x_i$ $18/3=6$

注意:$\sum x_i^2\neq(\sum x_i)^2$。$\sum x_i^2=9+25+100=134$、$(\sum x_i)^2=18^2=324$ です。

偏差の平方和(ばらつきの基礎):$\sum_{i=1}^{n}(x_i-\bar x)^2$。ここで $\bar x$(エックスバー)は平均で、$x_i-\bar x$ は平均からのずれです。$x=(3,5,10)$、$\bar x=6$ では $(3-6)^2+(5-6)^2+(10-6)^2=9+1+16=26$。なお $\sum(x_i-\bar x)=-3-1+4=0$ で、ずれの和は常に0になります。

対数との関係:$\ln\prod p_i=\sum\ln p_i$。積は対数をとると和になります。

x = [3, 5, 10]
n = len(x)                          # 要素の数 (int)
total = sum(x)                      # Σ x_i
mean = total / n
print("Σx =", total, "平均 =", mean)
print("Σx² =", sum(v ** 2 for v in x), " (Σx)² =", total ** 2)
print("Σ(x-平均) =", sum(v - mean for v in x))
print("Σ(x-平均)² =", sum((v - mean) ** 2 for v in x))

sum(イテラブル) は要素の合計を返し、v ** 2 for v in x は各要素を二乗して順に渡す書き方です。出力は 18、6.0、134、324、0.0、26.0 です。

段階付き例題:Σ を展開し、コードと照合する

例題:$\sum_{k=2}^{5}(2k-1)$ を求める。

print(sum(2 * k - 1 for k in range(2, 6)))        # 24
print(sum(2 * k - 1 for k in range(2, 5)))        # 上限を含め忘れると 15
print(len(range(2, 6)))                           # 項の数 4

意味:論文の式の「$i=1$ から $n$」は両端を含みます。Pythonの range(1, n+1) と対応します。range(n) は0から $n-1$ で、数式の範囲と1つずれることがあります。

例題2:成長倍率の積。4期間の成長率が $r=(0.10,-0.10,0.20,0)$ のとき、期間全体の倍率は

$\prod(1+r_i)=1.1\times0.9\times1.2\times1.0=1.188$。平均の率 $(0.1-0.1+0.2+0)/4=0.05$ を使って $1.05^4=1.2155$ とすると、実際の1.188とずれます。率の平均で複数期間を代表させるのは、近似でしかありません。

操作して理解する:添字の範囲と、積から和への変換

次のコードで、上限を変えたときの値を比べます。n を書き換えて、展開した式と照合してください。

n = 4
s = sum(i ** 2 for i in range(1, n + 1))
print("n =", n, " Σ i² =", s)
for n in [1, 2, 3, 4, 5]:
    print(n, sum(i ** 2 for i in range(1, n + 1)))

次に、積を対数の和に変える例です。確率 $p=(0.5,0.2,0.1)$ のとき、$\prod p_i=0.01$、$\ln\prod p_i=\sum\ln p_i$ です。

import math
p = [0.5, 0.2, 0.1]
prod = 1.0                       # 積の初期値は1
for v in p:
    prod *= v
print("積", prod, " ln(積)", round(math.log(prod), 5))
print("Σ ln p", round(sum(math.log(v) for v in p), 5))

どちらも約−4.60517で一致します。自分で試す問い:(1) p に 0 を入れると積は? 対数の和は? 答え:積は0。math.log(0) はエラーなので、対数の和は計算できない(確率0は対数と桁の定義域外)。(2) p を1000個の0.5にすると積は? 答え:約9.3×10⁻³⁰²で、さらに増やせば0に潰れる(アンダーフロー)。対数の和は−693.1で安定。

発展:二重和、総和の入れ替え、Σ記法の落とし穴

二重和 $\sum_{i=1}^{m}\sum_{j=1}^{n}a_{ij}$ は、行列(表)の全要素の合計です。有限個の和なら、$i$ と $j$ の順序を入れ替えても結果は同じです。表の行ごとに足してから合計しても、列ごとに足してから合計しても同じ、という意味です。

無限個の和(級数)の場合は、順序を入れ替えると値が変わることがあります。収束の条件は数列と等比級数で扱います。

記法の落とし穴:

総乗は、すべての項が正のときだけ対数で和にできます。項に0や負があると、定義域の問題で $\ln$ が使えません。

よくある失敗

失敗1:Σx² と (Σx)² を混同する

x = [3, 5, 10]
print(sum(v ** 2 for v in x))   # Σx²
print(sum(x) ** 2)              # (Σx)²

134と324で全く違います。「二乗してから足す」と「足してから二乗する」は別物です。分散などの式では、前者が標準です。直し方:式を $n=2$ か $3$ で展開し、括弧の位置を確認する。

失敗2:range の上限の含め忘れ

$\sum_{i=1}^{5}i$ は $1+2+3+4+5=15$ ですが、range(1, 5) では4までしか足しません。

print(sum(range(1, 5)))      # 10: 5 が抜ける
print(sum(range(1, 5 + 1)))  # 15

直し方:数式の上限 $n$ はコードでは n + 1 を指定する。結果が展開した値と一致するか、必ず小さな $n$ で検算する。

失敗3:定数の和を定数と取り違える

$\sum_{i=1}^{n}c$ の項は $i$ に依存しませんが、項を $n$ 個足すので $nc$ になります。

c, n = 4, 3
print(sum(c for _ in range(n)))   # 12 (= n*c)

誤って $c=4$ と答えると、$\sum(x_i-\bar x)$ のような式の展開でも、定数項の数が合わなくなります。直し方:「項の数」を数える。Σ の中に添字が無くても、足す回数は上限と下限で決まる。

まとめ

用語

総和(Σ)(summation)

指定した範囲の項をすべて足す記号。

総乗(Π)(product)

指定した範囲の項をすべて掛ける記号。

添字(index)

x_i の i のように、要素の番号を示す小さな文字。

偏差(deviation)

値と平均との差 x_i − x̄。

よくある質問

なぜΣ記号を使うのですか?

個数が決まっていない合計を1行で書けるからです。さらに、性質(定数倍や和の分解)を使って式変形ができ、論文やコードで同じ式を共有できます。

$\sum$ の下に $i=1$ と書かれていないときは?

$\sum_i x_i$ のように省略されたら、文脈から「$i$ の取りうる全範囲」と読みます。わからなければ前後の定義を探し、自分の資料では範囲を明記します。

Πは何に使いますか?

複数期間の成長倍率、確率の積(独立な事象の同時確率)、階乗 $n!=\prod_{k=1}^{n}k$ などです。積は桁が極端になりやすいので、対数をとって和にすることが多いです。

平均を $\frac1n\sum x_i$ と書くのはなぜですか?

合計 $\sum x_i$ を個数 $n$ で割るという定義そのものだからです。$n$ は欠損値を除いた件数なのか全件なのかで変わります。0と欠損は別物なので、どちらで割るかを決めておきます。

Pythonのループと何が違いますか?

数式は範囲が両端を含み、1始まりが多い一方、Pythonの range は上限を含まず0始まりです。この差で値が1つずれることが多いので、小さな $n$ で手計算と照合します。

実務でΣの範囲を確認する場面は?

KPIの定義で「全顧客か購入者だけか」「取消を除くか」を決めるときです。SQLの SUM や AVG が式のどの範囲を足しているかを、式に書き戻して合意します。

確認問題

問1 $\sum_{i=1}^{3}i^2$ の値は。

  1. ① 6
  2. ② 9
  3. ③ 14
  4. ④ 36
解答と解説

正解:③

$1^2+2^2+3^2=1+4+9=14$。6は $\sum i$、36は $(\sum i)^2$ です。

問2 $x=(3,5,10)$ のとき、$\sum x_i^2$ と $(\sum x_i)^2$ の関係として正しいのは。

  1. ① 両者は常に等しい
  2. ② $\sum x_i^2=134$、$(\sum x_i)^2=324$ で異なる
  3. ③ $\sum x_i^2=324$、$(\sum x_i)^2=134$
  4. ④ どちらも18
解答と解説

正解:②

二乗してから足す場合と、足してから二乗する場合は別の値です。

問3 偏差の和 $\sum(x_i-\bar x)$ はいつも何になるか。

  1. ① 0
  2. ② $n$
  3. ③ $\bar x$
  4. ④ 分散と等しい
解答と解説

正解:①

平均より大きいずれと小さいずれがちょうど打ち消し合い、和は0になります。ばらつきを見るには二乗して足します。

問4 数式の $\sum_{i=1}^{n}i$ をPythonに写すとき、正しいのは。

  1. ① sum(range(n))
  2. ② sum(range(1, n))
  3. ③ sum(range(1, n + 1))
  4. ④ sum(range(n + 1)) - 1
解答と解説

正解:③

range(a, b) は b を含みません。上限 n を含めるには n+1 を指定します。

問5 成長率 +10%、−10%、+20% の3期間を通した倍率として正しいのは。

  1. ① 平均率 6.7% で1.067
  2. ② 1.1+0.9+1.2
  3. ③ 1.2(20%増)
  4. ④ 1.1×0.9×1.2=1.188
解答と解説

正解:④

倍率は期間ごとに掛けます。率を足したり、平均率で代用すると誤差が出ます。

問6 確率の積 $\prod p_i$ を対数の和 $\sum\ln p_i$ に変える利点は。

  1. ① 値が必ず大きくなる
  2. ② アンダーフロー(小さすぎる値が0に潰れること)を避けて安定に計算できる
  3. ③ 確率が0でも使える
  4. ④ 和は積より必ず小さい
解答と解説

正解:②

小さい確率を何百回も掛けるとコンピュータ上で0になってしまいます。対数の和なら安定です。

次に学ぶこと

次は 数列と等比級数 で、規則的に並ぶ数(数列)とその和を学びます。等比数列の和は、この授業の Σ を使って閉じた式にします。戻るなら 対数と桁(対数)。

この授業の確認問題だけで習得とはしません。MA01 の総合テストと自力課題で判定します。

キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。

アプリを無料で開く有料版と無料版の違い