0
1

More than 3 years have passed since last update.

【初心者向け】回帰モデルの自前データで止まっている人向け(statsmodels(第2回目))

Last updated at Posted at 2020-05-10

【初心者向け】回帰モデルの自前データで止まっている人向け(statsmodels(第2回目))

ほぼ、備忘録

サンプルデータで止まっている人向け、statsmodels(OLS)入門

statsmodelsで回帰のサンプルをやってみて、自分で作ったデータで止まっている人向けの入門記事です。

このスクリプトで想定しているケースは、架空の飲食店(バーやスカイラウンジーの想定)で、商品の大分類や客単価、来店人数等が記録された架空の売上データがあったとして、売上が多い日には何か傾向があるのだろうか?という設定です。


【環境】
Linux: debian10.3
python: 3.7.3
pandas: 1.0.3
statsmodels: 0.11.1
jupyter-lab: 2.1.0

以下の様な、csvファイルがあったとして

Date,earnings,customer,earnings_customer,fortified_sweet,rum,brown_spirits,mojito_rebjito,cocktail,bar_food,cigar
2020-03-01,30000,5,6000,2,2,2,3,2,5,1

【1】モデルの適用とサマリーの表示(前回の続き)

statsmodels

# 回帰モデルの呼び出し
model = sm.OLS(y, sm.add_constant(X))

# モデルの作成
results = model.fit()

#結果の詳細を表示
print(results.summary())


                            OLS Regression Results                            
==============================================================================
Dep. Variable:               earnings   R-squared:                       0.930
Model:                            OLS   Adj. R-squared:                  0.921
Method:                 Least Squares   F-statistic:                     100.8
Date:                Sat, 09 May 2020   Prob (F-statistic):           2.50e-28
Time:                        01:09:38   Log-Likelihood:                -618.49
No. Observations:                  61   AIC:                             1253.
Df Residuals:                      53   BIC:                             1270.
Df Model:                           7                                         
Covariance Type:            nonrobust                                         
===================================================================================
                      coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------
const            -435.1552   2434.515     -0.179      0.859   -5318.173    4447.863
customer         5103.4245    617.184      8.269      0.000    3865.511    6341.338
fortified_sweet   844.1247    543.874      1.552      0.127    -246.747    1934.997
rum              -389.6465    440.184     -0.885      0.380   -1272.545     493.252
brown_spirits    1267.2019    581.664      2.179      0.034     100.532    2433.872
cocktail        -1766.9369    568.908     -3.106      0.003   -2908.022    -625.852
bar_food           74.3759    514.091      0.145      0.886    -956.760    1105.512
cigar            4420.0626    599.323      7.375      0.000    3217.972    5622.153
==============================================================================
Omnibus:                       16.459   Durbin-Watson:                   1.864
Prob(Omnibus):                  0.000   Jarque-Bera (JB):               24.107
Skew:                           0.971   Prob(JB):                     5.83e-06
Kurtosis:                       5.390   Cond. No.                         37.4
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

サマリーの一部を見ると

statsmodels

#結果の詳細を表示
print(results.summary())

サマリーの一部

R-squared:                       0.930
Adj. R-squared:                  0.921
AIC:                             1253.

                      coef    std err          t      P>|t|      [0.025      0.975]
-----------------------------------------------------------------------------------

customer         5103.4245    617.184      8.269      0.000    3865.511    6341.338
fortified_sweet   844.1247    543.874      1.552      0.127    -246.747    1934.997
rum              -389.6465    440.184     -0.885      0.380   -1272.545     493.252
brown_spirits    1267.2019    581.664      2.179      0.034     100.532    2433.872
cocktail        -1766.9369    568.908     -3.106      0.003   -2908.022    -625.852
bar_food           74.3759    514.091      0.145      0.886    -956.760    1105.512
cigar            4420.0626    599.323      7.375      0.000    3217.972    5622.153

サマリーが表示されたら、まず見るところが、あるという。

「R-squared 」決定係数(1に近い程、精度が高い)
「Adj. R-squared」 自由度調整済み決定係数(説明変数が多い時の決定係数)
・このケースでは、説明変数が多いので、この値で判断しようと思います。

「AIC」 どの程度モデルの当てはまっているか?(小さい程、精度が高い。)
・数値が大きすぎる(精度が低い)様です

「coef」回帰係数(大きい程、全体に与える影響が大きい)
・これで見ると、「customer」や「cigar」が大きな影響を与える様です。

「>|t|」(小さい程(基準として、0.05未満)、変数の影響が偶然でない可能性が高い)
・これで見ると、「customer」や「cigar」に加えて、「cocktail」の値が小さいのは、偶然では無いという事の様です。

ここまでのサマリーを見ると、説明変数が多い様です。

「customer」や「cigar」が売上に大きな影響を与えるという事がいえそうです。

回帰係数の出力を見ると、ほぼ想定通りの結果といえると思います。

「AIC」の値を見ると、説明変数が多く精度が低い様です。
説明変数を減らし、再度、分析をやってみようと思います。

再分析の結果は、別の機会に更新しようと思います。

customer_cigar.jpg

グラフだけ先に投稿しておくと、凡例がありませんが、グラフを見ると、青っぽい線が「customer(ゲストの来店人数)」、赤っぽい線が「cigar(cigarの提供)」の動きです。

以上、【初心者向け】回帰モデルの自前データで止まっている人向け(statsmodels(第2回目))でした。

0
1
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
1