Fast ein Memorandum
** Einführung in Statistikmodelle (OLS) für diejenigen, die mit Beispieldaten nicht weiterkommen </ font> **
Dies ist ein Einführungsartikel für diejenigen, die eine Regressionsstichprobe mit Statistikmodellen ausprobiert haben und mit ihren eigenen Daten nicht weiterkommen.
Als ich kürzlich versuchte, Prophet auf Facebook als Zeitreihenanalyse zu verwenden, einschließlich der Vorhersage von Daten, war die von mir erstellte Datenmenge gering und die Genauigkeit noch unbekannt, aber es funktionierte vorerst. Als ich die Regression mit Statistikmodellen und sklearn begann, was die Grundlagen zu sein scheinen, als ich die Daten selbst erstellte, erschien ein Fehler usw. und es hörte auf.
Als ich mir die offizielle Website von statsmodels angesehen und auf verschiedene Websites verwiesen habe, bin ich nach und nach vorgegangen, und es scheint, dass es fast wie erwartet funktioniert hat.
Zum Zeitpunkt der Modellanwendung wurde es bei den zu übergebenden Daten angehalten. Ich würde es gerne posten, weil die Bewegung mit meinen eigenen Daten nahe an dem lag, was ich erwartet hatte.
Bei diesem Skript handelt es sich um ein fiktives Restaurant (vermutlich eine Bar oder eine Sky Lounge). Bei Verkäufen werden fiktive Verkaufsdaten angenommen, in denen die Hauptkategorien von Produkten, der Stückpreis pro Kunde, die Anzahl der Besucher usw. aufgezeichnet sind. Gibt es eine Tendenz an Tagen, an denen es viele gibt? Es ist eine Einstellung.
Es wird davon ausgegangen, dass das Geschäft westliche Spirituosen und Cocktails, leichte Mahlzeiten und Zigarren anbietet.
【Umgebung】 Linux: debian10.3 python: 3.7.3 pandas: 1.0.3 statsmodels: 0.11.1 jupyter-lab: 2.1.0
Angenommen, Sie haben eine CSV-Datei wie die folgende
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 fiktiver Verkaufsdaten **
Das Skript lief in Jupiter.
jupyter
##!/usr/bin/env python
# coding: utf-8
#Fiktive Verkaufsdaten
# 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
#CSV-Datei
infile = './sales_item_tf.csv'
df = pd.read_csv(infile ,usecols={'earnings' ,'customer'
,'fortified_sweet' ,'brown_spirits' ,'rum' ,'cocktail' ,'bar_food','cigar'})
df.columns
#Korrelationskoeffizient
df_corr = df.corr()
sns.heatmap(df_corr, vmax=1, vmin=-1, center=0)
#Zuordnungsvariable X zuordnen
X = df.loc[: ,'customer':'cigar']
X = X.astype(float)
#X.info()
df.columns
#Ergebnis in Zielvariable y'Ersatz
df
y = df['earnings']
y = y.astype(float)
#y = y.values
y
#Regressionsmodell aufrufen
model = sm.OLS(y, sm.add_constant(X))
#Modell erstellen
results = model.fit()
#Ergebnisdetails anzeigen
print(results.summary())
# plot
#plt.plot(X)
** 2. Versuchen Sie, die Konfiguration aufzuteilen ** [1] Importieren der Bibliothek und Lesen der CSV-Datei
jupyer
#Fiktive Verkaufsdaten
# 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
#CSV-Datei
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] Ersatzdaten für erklärende Variable (X) und objektive Variable (y)
jupyter
#Zuordnungsvariable X zuordnen
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
Die erklärende Variable (X) und die Zielvariable (y) werden in Float-Typ geändert. </ font> Ich habe hier angehalten. ** Es scheint, dass ein Fehler auftritt, wenn Sie ihn beim Anwenden des Modells nicht als Float-Typ festlegen. ** ** **
[3] Anwenden des Modells und Anzeigen der Zusammenfassung
statsmodels
#Regressionsmodell aufrufen
model = sm.OLS(y, sm.add_constant(X))
#Modell erstellen
results = model.fit()
#Ergebnisdetails anzeigen
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.
Derzeit scheint das Modell angewendet worden zu sein.
Es ist etwas länger her, also werde ich es in zwei Teile teilen. Schauen wir uns zunächst die Ergebnisse der Zusammenfassung an.
** Einmal fertig, [für Anfänger] Es war für Leute, die bei ihren eigenen Daten des Regressionsmodells (Statistikmodelle (1. Mal)) stehen blieben. ** ** **
Recommended Posts