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