1. Home
  2. プログラマーのための線形代数
  3. 統計学の基本
  4. 期待値と平均

期待値と平均

ここでは統計学の基本的ツールである期待値と平均について解説します。

当ページで学ぶこと

  • 期待値とは
  • 平均とは
  • 期待値と平均の違い
  • Pythonで平均(期待値)を求める

期待値とは

確率論において期待値(expected value)とは、確率変数 \(X\) の平均値のことです。これは大文字の \(E\) とスクエア・ブラケット \([ \ ]\) を使って、\(E[X]\) と書き表します。

たとえばある試行において…

  • 変数 \(x_1\) が起こる確率を \(p_1\)
  • 変数 \(x_2\) が起こる確率を \(p_2\),
         \(\vdots\)
  • 変数 \(x_n\) が起こる確率を \(p_n\)

とすると、この試行の期待値 \(E(X)\) は以下のように、それぞれの事象が起こる確率の加重合計で求められます。

\[\begin{eqnarray}
E[X]
=
\sum^{n}_{k=1}x_kp_k
=
x_1 \times p_1 + x_2 \times p_2 + \cdots + x_n \times p_n
\end{eqnarray}\]

ただし、コイントスやサイコロ投げなどのように全ての変数が同様に起こりやすいシンプルなものごとの場合は、期待値は、それぞれの確率変数 \(x_n\) の値の合計を、値の数 \(n\) で割ることで求められます。

\[\begin{eqnarray}
E[X]
=
\dfrac{1}{n} \times \sum^{n}_{k=1} x_k
=
\dfrac{1}{n} (x_1+x_2+ \cdots +x_n)
\end{eqnarray}\]

平均とは

統計学では、平均(mean)はよく期待値(expected value)と混同されてしまいますが、両者は別物の概念です。

まず、期待値は \(E[X]\) で表される一方で、平均はギリシャ文字の \(\mu\) で書き表されます。そして期待値は母集団すべてから求められるものであるのに対して、平均は、母集団から抽出した標本から求められるものです。このことから平均は「標本平均」とも言われます。

これは次のように求められます。

\[\begin{eqnarray}
\mu = \dfrac{1}{n} \times \sum^{n}_{k=1} \ x_k
\end{eqnarray}\]

よりコンパクトに次のように書き表されることもあります。

\[\begin{eqnarray}
\mu = P(x) \times \sum x
\end{eqnarray}\]

\(x\) は観察したベクトルで、\(P(x)\) はベクトルのそれぞれの値の確率です。

なお、特定のデータ \(x\) の平均を表すときは、\(\bar{x}\) (エックスバー)と表されます。

\[\begin{eqnarray}
\bar{x} =\dfrac{1}{n} \times \sum^n_{i=1} x_i
\end{eqnarray}\]

Pythonで平均(期待値)を求める

Pythonでは、np.mean 関数を使うことで NumPy で作成したベクトルや行列の平均を求めることができます。

以下はベクトルの平均を求めています。

In [1]:
import numpy as np
# ベクトルを作成
v = np.array([1,2,3,4,5,6])
print(v)
[1 2 3 4 5 6]
In [2]:
# ベクトルの平均を算出
mean = np.mean(v)
print(mean)
3.5

次に行列の平均を求めてみましょう。行列の場合は、オプション引数で axis を指定することで、行平均や列平均を得ることができます。

In [3]:
# 行列を作成
A = np.array([
    [1, 2, 3],
    [4, 5, 6]])
print(A)
[[1 2 3]
 [4 5 6]]
In [4]:
# 行列全体の平均を算出
mean = np.mean(A)
print(mean)
3.5

axis=1 で行ごとの平均を求めます。

In [5]:
# 行平均を算出
r_mean=np.mean(A, axis=1)
print(r_mean)
[2. 5.]

axis=0 で列ごとの平均を求めます

In [6]:
# 列平均を算出
c_mean=np.mean(A,axis=0)
print(c_mean)
[2.5 3.5 4.5]