読者の今日はデータサイエンスにおける重要な統計検定であるANOVA検定について、Pythonプログラミングで詳しく説明します。
では、さっそく始めましょう
ANOVA 検定の出現
データサイエンスや機械学習の領域では、モデリングを行う前にデータを理解し処理する必要があります。
つまり、データセットのすべての変数とその信憑性を、目標値への貢献度の観点から分析する必要があります。
通常、変数には2種類あります。
- 連続変数
- カテゴリー変数
以下は、数値変数を分析するために主に使用される統計的検定です。
- T-検定
- 相関回帰分析,その他.
ANOVA検定はカテゴリー統計検定で、カテゴリー変数を分析するために使用されます。
この記事もチェック:機械学習の4つの種類について解説していく
ANOVAテストとは何なのか?
ANOVA検定は、カテゴリ・データ変数を分析し、理解するための統計検定です。
それは、従属変数が1つまたは複数の独立したカテゴリ・データ要素によってどの程度影響されるかを推定します。
ANOVA検定では、独立カテゴリー変数の各グループの統計的平均の差を推定し分析します。
ANOVA 検定のための仮説
周知のように、仮説の主張は2つのカテゴリーで表現される。
仮説の主張は、それぞれ帰無仮説と対立仮説という2つのカテゴリーで表されます。
- ANOVA 検定の場合、我々の Null 仮説は、次のように主張します。Null仮説は、ANOVA検定の場合、次のように主張します。 “変数のすべてのグループ/カテゴリの統計的平均は同じである”。
- 一方、対立仮説は次のように主張します。一方、対立仮説は次のように主張します。「変数のすべてのグループ/カテゴリの統計的平均は同じではない」。
これを言って、我々は今、ANOVA 検定の仮定または考察に焦点を当てましょう。
ANOVA検定の前提条件
- 列のデータ要素は,正規分布に従う.
- 変数は共通の分散を共有します。
PythonでANOVA検定 – シンプルで実用的なアプローチ!
この例では、レンタサイクルを選ぶ顧客の数を、提供されたさまざまな条件に基づいて予測することが要求されるレンタサイクル数予測データセットを利用します。
データセットはこちらで確認できます
まず、read_csv()`関数を使って、データセットをPython環境にロードします。
さらに、変数のデータ型を(EDA)から定義されたデータ型に変更します。
また、osモジュールとPandasライブラリを使って、それぞれシステム変数の操作とCSVデータのパースを行います。
import os
import pandas
#Changing the current working directory os.chdir( "D:/Ediwsor_Project - Bike_Rental_Count" )
BIKE = pandas.read_csv( "day.csv" )
BIKE[ 'holiday' ] = BIKE[ 'holiday' ].astype( str )
BIKE[ 'weekday' ] = BIKE[ 'weekday' ].astype( str )
BIKE[ 'workingday' ] = BIKE[ 'workingday' ].astype( str )
BIKE[ 'weathersit' ] = BIKE[ 'weathersit' ].astype( str )
BIKE[ 'dteday' ] = pandas.to_datetime(BIKE[ 'dteday' ])
BIKE[ 'season' ] = BIKE[ 'season' ].astype( str )
BIKE[ 'yr' ] = BIKE[ 'yr' ].astype( str )
BIKE[ 'mnth' ] = BIKE[ 'mnth' ].astype( str )
print (BIKE.dtypes)
|
結果は以下の通りです。
instant int64 dteday datetime64[ns] season object
yr object
mnth object
holiday object
weekday object
workingday object
weathersit object
temp float64 atemp float64 hum float64 windspeed float64 casual int64 registered int64 cnt int64 dtype: object
|
さて、いよいよANOVAテストを適用します。
PythonはANOVAを実装するために、statsmodels
ライブラリの anova_lm()
という関数を提供しています。
最初に、普通最小2乗法を実行し、さらにANOVA検定を適用します。
import statsmodels.api as sm
from statsmodels.formula.api import ols
for x in categorical_col:
model = ols( 'cnt' + '~' + x, data = BIKE).fit() #Oridnary least square method
result_anova = sm.stats.anova_lm(model) # ANOVA Test
print (result_anova)
|
結果は以下の通りです。
df sum_sq mean_sq F PR(>F)
season 3.0 9.218466e + 08 3.072822e + 08 124.840203 5.433284e - 65
Residual 713.0 1.754981e + 09 2.461404e + 06 NaN NaN
df sum_sq mean_sq F PR(>F)
yr 1.0 8.813271e + 08 8.813271e + 08 350.959951 5.148657e - 64
Residual 715.0 1.795501e + 09 2.511190e + 06 NaN NaN
df sum_sq mean_sq F PR(>F)
mnth 11.0 1.042307e + 09 9.475520e + 07 40.869727 2.557743e - 68
Residual 705.0 1.634521e + 09 2.318469e + 06 NaN NaN
df sum_sq mean_sq F PR(>F)
holiday 1.0 1.377098e + 07 1.377098e + 07 3.69735 0.054896
Residual 715.0 2.663057e + 09 3.724555e + 06 NaN NaN
df sum_sq mean_sq F PR(>F)
weekday 6.0 1.757122e + 07 2.928537e + 06 0.781896 0.584261
Residual 710.0 2.659257e + 09 3.745432e + 06 NaN NaN
df sum_sq mean_sq F PR(>F)
workingday 1.0 8.494340e + 06 8.494340e + 06 2.276122 0.131822
Residual 715.0 2.668333e + 09 3.731935e + 06 NaN NaN
df sum_sq mean_sq F PR(>F)
weathersit 2.0 2.679982e + 08 1.339991e + 08 39.718604 4.408358e - 17
Residual 714.0 2.408830e + 09 3.373711e + 06 NaN NaN
|
有意水準を0.05とすると、p値が0.05より小さい場合、カテゴリ・データの各レベルで形成されるグループの平均にかなりの差があると仮定し主張することになります。
つまり、NULL仮説を棄却します。
まとめ
ここまでで、このトピックは終了です。
何か疑問がありましたら、お気軽にコメントください。
おすすめの記事 Pythonでカイ二乗検定
それでは、Happy Analyzing!