[PYTHON] [Pour les débutants] Pour ceux qui sont arrêtés par leurs propres données du modèle de régression (modèles de statistiques (1ère fois))

[Pour les débutants] Pour ceux qui sont arrêtés par leurs propres données du modèle de régression (modèles de statistiques (1ère fois))

Presque un mémorandum

** Introduction aux modèles de statistiques (OLS) pour ceux qui sont coincés avec des exemples de données </ font> **

Ceci est un article d'introduction pour ceux qui ont essayé un échantillon de régression avec des statsmodels et sont bloqués avec leurs propres données.

Récemment, lorsque j'ai essayé d'utiliser prophet sur facebook comme analyse de séries chronologiques, y compris la prédiction de données, la quantité de données que j'ai préparées était petite et la précision était encore inconnue, mais cela a fonctionné pour le moment. Quand j'ai commencé la régression avec des modèles de statistiques et sklearn, qui semblent être les bases, quand j'ai créé moi-même les données, une erreur etc. est apparue et elle s'est arrêtée.

En regardant le site officiel de statsmodels et en me référant à divers sites, j'ai procédé petit à petit, et il semble que cela a fonctionné presque comme prévu.

Au moment de l'application du modèle, il s'est arrêté aux données à transmettre. J'aimerais le poster car le mouvement était proche de ce que j'attendais avec mes propres données.

Le cas supposé par ce script est un restaurant fictif (supposé être un bar ou un sky lounge), et les ventes sont supposées avoir des données de ventes fictives qui enregistrent les principales catégories de produits, le prix unitaire par client, le nombre de visiteurs, etc. Y a-t-il une tendance les jours où il y en a beaucoup? C'est un décor.

On suppose que le magasin propose de l'alcool et des cocktails occidentaux, des repas légers et des cigares.


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

En supposant que vous ayez un fichier csv comme celui ci-dessous

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. Analyse des données de ventes fictives **

Le script s'est exécuté en jupyter.

jupyter



##!/usr/bin/env python
# coding: utf-8

#Données de vente fictives
# infile = './sales_item_tf.csv'
import pandas as pd
#import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns

#fichier csv
infile = './sales_item_tf.csv'

df = pd.read_csv(infile ,usecols={'earnings' ,'customer' 
                                  ,'fortified_sweet' ,'brown_spirits' ,'rum' ,'cocktail' ,'bar_food','cigar'})

df.columns

#Coefficient de corrélation
df_corr = df.corr()
sns.heatmap(df_corr, vmax=1, vmin=-1, center=0)

#Affecter à la variable explicative X
X = df.loc[: ,'customer':'cigar']
X = X.astype(float)

#X.info()
df.columns

#Gains dans la variable objective y'Remplacer
df
y = df['earnings']
y = y.astype(float)
#y = y.values

y

#Modèle de régression d'appel
model = sm.OLS(y, sm.add_constant(X))

#Créer un modèle
results = model.fit()

#Afficher les détails des résultats
print(results.summary())

# plot
#plt.plot(X)

** 2. Essayez de diviser la configuration **   [1] Importation de la bibliothèque et lecture du fichier csv

jupyer



#Données de vente fictives
# infile = './sales_item_tf.csv'
import pandas as pd
#import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns

#fichier csv
infile = './sales_item_tf.csv'

df = pd.read_csv(infile ,usecols={'earnings' ,'customer' 
                                  ,'fortified_sweet' ,'brown_spirits' ,'rum' ,'cocktail' ,'bar_food','cigar'})

df.columns

Index(['earnings', 'customer', 'fortified_sweet', 'rum', 'brown_spirits',
       'cocktail', 'bar_food', 'cigar'],
      dtype='object')

[2] Remplacer les données par la variable explicative (X) et la variable objective (y)

jupyter



#Affecter à la variable explicative X
X = df.loc[: ,'customer':'cigar']
X = df[['customer' ,'cigar']]
X = X.astype(float)

X.head()

	customer 	fortified_sweet 	rum 	brown_spirits 	cocktail 	bar_food 	cigar
0 	5.0 	2.0 	2.0 	2.0 	2.0 	5.0 	1.0
1 	10.0 	8.0 	5.0 	1.0 	2.0 	2.0 	1.0
2 	10.0 	5.0 	2.0 	2.0 	2.0 	2.0 	0.0
3 	6.0 	5.0 	5.0 	3.0 	2.0 	0.0 	0.0
4 	10.0 	5.0 	6.0 	2.0 	5.0 	5.0 	

y

0     30000.0
1     60000.0
2     50000.0
3     30000.0
4     40000.0
       ...    
56    50000.0
57    48000.0
58    40000.0
59    20000.0
60    20000.0
Name: earnings, Length: 61, dtype: float64

La variable explicative (X) et la variable objectif (y) sont changées en type flottant. </ font> Je me suis arrêté ici. ** Il semble qu'une erreur se produise si vous n'en faites pas un type flottant lors de l'application du modèle. ** **

[3] Application du modèle et affichage du résumé

statsmodels



#Modèle de régression d'appel
model = sm.OLS(y, sm.add_constant(X))

#Créer un modèle
results = model.fit()

#Afficher les détails des résultats
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.

Pour le moment, il semble que le modèle ait été appliqué.

Cela fait un peu plus longtemps, alors je vais le diviser en deux parties. Commençons par regarder les résultats du résumé.

** Une fois terminé, [pour les débutants] C'était pour les personnes qui se sont arrêtées à leurs propres données du modèle de régression (modèles de statistiques (1ère fois)). ** **

Recommended Posts