変動係数 ばらつきを比較する

前回、データのばらつきを示す分散と標準偏差について学習しました。分析業務では複数のデータセット同士のばらつきを比較することがありますが、分散や標準偏差をそのまま比較することは不適切な場合があります。

ばらつきの比較

ある植物の茎と花弁の長さを測定した場合について考えてみましょう。この植物の茎の長さの平均は約30cm、花弁の長さの平均が3cm、いくつか選んで計測した結果は以下の通りとします。この結果の標準偏差を比較するとどうなるでしょうか。

import numpy as np
kuki =  [25.6,28.4,29.8,27.0,23.7,30.8,29.8,28.3,29.2,36.5,30.7]
kaben = [2.5,3.1,3.0,2.9,3.5,2.3,2.7,2.8,3.1,2.8,2.7]

np.std(kuki) # 3.13
np.std(kaben) # 0.30

計算結果を見ると花弁の長さの方が標準偏差が小さいため、茎と比較して花びらのサイズは個体ごとのばらつきが小さい、と結論づけていいでしょうか?

実は分散や標準偏差はたいていデータの大きさに依存するためこの結論は不適切です。この植物は花弁と茎ののサイズが十分異なるため、単純に比較することは不適切なのです。他にも、例えば

  • 小型部品と大型部品のサイズの標準偏差を比較すると、大型部品のサイズのほうが標準偏差が大きい
  • ネズミとゾウのサイズの標準偏差を比較すると、ゾウのほうが標準偏差が大きい

といった例が挙げられます。異なるデータに対して単純に標準偏差でばらつきを評価することが適切でないことがわかるかと思います。

変動係数

このため、異なる性質のデータのばらつきを比較する場合は変動係数を利用します。変動係数は以下の式、標準偏差÷平均値で与えられます。
\[
CV = \frac{\sigma}{\overline{x}}
\] また分母、分子で単位が揃うので変動係数は「単位なし」となるため、メートルとセンチ、といった異なる単位のデータの比較も可能となります。Pythonで計算する場合、以下のようにscipy.statsのvariationを使用します。

from scipy import stats

stats.variation(kuki) # 0.10
stats.variation(kaben) # 0.10

実際に計算してみると、茎と花弁のサイズで個体ごとのばらつきで差がないといえます。

変動係数の計算例

では練習です。ある工場で棒状の部品A、B、Cを製造しているラインがそれぞれあるとします。品質向上のため、部品サイズのばらつきを改善する計画を立てたのですが、資金の都合上、まずは相対的にばらつきの最も大きい製品から改善したいと考えました。A、B、Cどのラインから着手するべきでしょうか。なお、A、B、Cのカタログ上の長さは500mm、1000mm、2000mm、いくつか選んで計測した結果は以下の通りとします。

A=[500.04,500.13,499.98,499.88,499.81,500.07,499.92,500.02,500.04,499.87,499.95]
B=[1000.37,1000.49,999.29,1000.05,999.97,1000.93,999.7,1000.01,1000.26,999.86,1000.46]
C=[2000.22,1999.33,1998.71,1999.52,2000.46,2000.61,2000.08,2000.45,1999.43,2000.8,1999.97]

部品A、B、Cのサイズが異なるため、単純に標準偏差を計算すると部品サイズの大きいCがもっともばらつきが大きいということになってしまいます。

import numpy as np
np.std(A) # 0.092
np.std(B) # 0.422
np.std(C) # 0.613

そこで、さきほど学習したとおり変動係数を利用します。

from scipy import stats

stats.variation(A) # 0.0001
stats.variation(B) # 0.0004
stats.variation(C) # 0.0003

変動係数を比較した結果、相対的には部品Bのばらつきが最も大きいといえるため、最初に改善すべきラインはBと結論づけることができます。