PythonによるANOVA検定(分散分析)の実装方法を解説していく

スポンサーリンク

読者の今日はデータサイエンスにおける重要な統計検定であるANOVA検定について、Pythonプログラミングで詳しく説明します。

では、さっそく始めましょう


スポンサーリンク

ANOVA 検定の出現

データサイエンスや機械学習の領域では、モデリングを行う前にデータを理解し処理する必要があります。

つまり、データセットのすべての変数とその信憑性を、目標値への貢献度の観点から分析する必要があります。

通常、変数には2種類あります。

  1. 連続変数
  2. カテゴリー変数

以下は、数値変数を分析するために主に使用される統計的検定です。

  • T-検定
  • 相関回帰分析,その他.

ANOVA検定はカテゴリー統計検定で、カテゴリー変数を分析するために使用されます。


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!

タイトルとURLをコピーしました