0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonで可視化するデータのばらつきの指標

Posted at

データのばらつきを表す指標について

データを分析する中で、データがどのくらいばらついているのかを調査する機会がありました。その際に、ばらつきの指標がたくさんありどれが適切な指標なのか分からず調べたので備忘録として以下に記録します。

標準偏差(Standard Deviation):

データが平均値からどれだけ散らばっているかを表す統計指標で、データのばらつきの尺度としてよく使われます。各データ点と平均値との差(偏差)を二乗して平均したもの(分散)の平方根です。数式は以下の通りです。

$$
Standard Deviation = sqrt(Σ(x_i - μ)^2 / N)
$$

ここで、
x_iは各データ点、μは平均値、Nはデータ点の総数を表します。

ジニ係数(Gini Coefficient):

経済学で一般的に使用される不平等の指標で、0(完全な平等)から1(完全な不平等)までの範囲の値を持つ。数式は以下の通りです。

$$
Gini Coefficient = Σ(Σ|x_i - x_j|) / (2 * n^2 * μ)
$$

ここで、xi はソートされたデータ、iはデータの順位(ソート順)、μ は平均値、Nはデータ点の総数を表します。

エントロピー(Entropy):

データの不確実性や情報の量を表す指標で、確率分布の不確実性を表します。数式は以下の通りです。

$$
Entropy = -Σp(x_i) * log_2(p(x_i))
$$

ここで、p(xi) は各データ点の確率を表します。

MAD (Median Absolute Deviation):

データ点が中央値からどれだけ離れているかを表す指標で、外れ値に強い平均の代替として使われます。数式は以下の通りです。

$$
MAD = median(|x_i - median(x)|)
$$

ここで、xi は各データ点、xは全データセットを表します。

Mean Absolute Deviation (MAD):

データ点が平均値からどれだけ離れているかを表す指標で、平均と同様にデータの中心傾向を表すが、外れ値の影響を受けにくい。数式は以下の通りです。

$$
Mean Absolute Deviation = Σ|x_i - μ| / N
$$

ここで、xiは各データ点、μは平均値、Nはデータ点の総数を表します。

pythonコードと可視化

これらの指標をPythonで計算して可視化するためのサンプルコードとサンプルデータを以下に示します。

index 疑似データ
0 1.764052345967664
1 0.4001572083672233
2 0.9787379841057392
3 2.240893199201458
4 1.8675579901499675
5 以下省略
import numpy as np
import pandas as pd
import scipy.stats as stats
import plotly.graph_objects as go
import math

# ランダムデータの生成
np.random.seed(0)
data = np.random.normal(0, 1, 100)

# 標準偏差
std_dev = np.std(data)

# ジニ係数
data_sorted = np.sort(data)
n = len(data)
gini_coeff = (np.sum((2 * np.arange(1, n + 1) - n  - 1) * data_sorted)) / (n * np.mean(data))

# エントロピー
freqs = pd.Series(data).value_counts(normalize=True)
entropy = -np.sum(freqs * np.log2(freqs))

# MAD
mad = np.median(np.abs(data - np.median(data)))

# Mean Absolute Deviation
mean_abs_dev = np.mean(np.abs(data - np.mean(data)))

# 計算結果(ジニ係数はスケールが違いすぎたので割愛)
results = [std_dev,entropy, mad, mean_abs_dev]

# Plotlyで可視化
fig = go.Figure(data=[go.Bar(
            x=['Std Dev','Entropy', 'MAD', 'Mean Abs Dev'],
            y=results,
            text=results,
            textposition='auto',
        )])

fig.update_layout(title_text='Comparison of Statistical Measures')

fig.show()

まとめ

以下に各統計指標が一般的にどの程度の値を持つか、そしてそれらがどのようにデータ分布の異なる性質を反映するかについて説明します。

1. 標準偏差:

標準偏差はデータがその平均値からどれだけ散らばっているかを示します。標準偏差が小さい場合、データ値は平均値に近く集中しています。標準偏差が大きい場合、データは平均値から広く散らばっています。標準偏差の値はデータのスケールに依存します。したがって、比較するためには同じ単位やスケールのデータを使用する必要があります。

2. ジニ係数:

ジニ係数は0から1の間の値を持ち、データの不平等度を示します。ジニ係数が0に近いほど、データは均等に分布しています。ジニ係数が1に近いほど、データは不均等に分布しています。例えば、所得の不平等を測る際によく使われます。

3. エントロピー:

エントロピーは情報理論における不確実性の尺度で、確率分布全体を考慮して計算されます。エントロピーが高いほどデータの不確実性が高く、低いほど不確実性が低いです。離散的な分布(たとえば、コイン投げやサイコロ投げ)のエントロピーは一般的に0以上の値を取ります。

4. MAD (Median Absolute Deviation):

MADはデータがその中央値からどれだけ散らばっているかを示します。MADが大きいほど、データは中央値から広く散らばっています。MADは外れ値に対して頑健(影響を受けにくい)であるため、データに外れ値が含まれている場合の分散の尺度としてよく使われます。

5. Mean Absolute Deviation:

この指標はデータが平均値からどれだけ散らばっているかを示します。Mean Absolute Deviationが大きいほど、データは平均値から広く散らばっています。Mean Absolute Deviationも外れ値に対して頑健です。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?