Ich denke, es ist sehr wichtig, den Effekt nach Durchführung verschiedener Versuche mit WEB-Diensten zu überprüfen. Ich denke, dass grundlegende Statistiken vollständig als Methode verwendet werden können. Dieses Mal haben wir die Methode der statistischen Datenanalyse mit Python + Jupyter Lab (Docker) zusammengefasst, um die Auswirkungen der Testproduktion, die in Unternehmen verwendet werden kann, anhand der Basisstatistik und der Datenanalyse zu überprüfen.
Beachten Sie auch das diesmal verwendete Notizbuch. https://github.com/hikarut/Data-Science/tree/master/notebooks/statisticsSample
Es wird davon ausgegangen, dass Jupyter Lab mit Docker verwendet werden kann, indem auf Folgendes Bezug genommen wird. Verwenden Sie die mit Docker gestartete vim-Schlüsselbindung in JupyterLab
- | Qualitative erklärende Variablen (2 Klassifikationen) |
Quantitative erklärende Variablen (Mehrere Fälle einschließlich Quantität und Qualität) |
---|---|---|
Quantitatives Ergebnis(Numerisch) | T-Test für die Differenz zwischen Durchschnittswerten (oder Wilcoxons Rang-Summen-Test) |
Multiple Regressionsanalyse |
Qualitatives Ergebnis(Klassifizierungsart) | Z-Test für den Unterschied im Verhältnis (Gleich wie Chi-Quadrat-Test) |
Logistische Regressionsanalyse |
import numpy as np
np.mean()
import numpy as np
np.median()
import numpy as np
np.var()
import numpy as np
np.std()
#1 Probe t Test
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
coffee = np.array([
210.9, 195.4, 202.1 , 211.3, 195.5,
212.9, 210.9, 198.3, 202.1, 215.6,
204.7, 212.2, 200.7, 206.1, 195.8
])
t, p = sp.stats.ttest_1samp(coffee, popmean=200)
print('Mutterdurchschnitt:', np.mean(coffee))
print('T-Wert mit einem Bevölkerungsdurchschnitt von 200:', t)
print('Wahrscheinlichkeit, dass der Bevölkerungsdurchschnitt 200 beträgt(p-Wert):', p)
Ausführungsergebnis
Bevölkerungsdurchschnitt: 204.96666666666664
T-Wert mit einem Bevölkerungsdurchschnitt von 200: 2.751076959309973
Wahrscheinlichkeit, dass der Bevölkerungsdurchschnitt 200 beträgt(p-Wert): 0.015611934395473872
#Gepaarter T-Test
import numpy as np
from scipy import stats
A = np.array([0.7, -1.6, -0.2, -1.2, -0.1, 3.4, 3.7, 0.8, 0.0, 2.0])
B = np.array([1.9, 0.8, 1.1, 0.1, -0.1, 4.4, 5.5, 1.6, 4.6, 3.4])
print('Ein Durchschnitt:', np.mean(A))
print('B Durchschnitt:', np.mean(B))
stats.ttest_rel(A, B)
Ausführungsergebnis
Ein Durchschnitt: 0.75
B Durchschnitt: 2.3299999999999996
Ttest_relResult(statistic=-4.062127683382037, pvalue=0.00283289019738427)
#Studententest
import numpy as np
from scipy import stats
A = np.array([6.3, 8.1, 9.4, 10.4, 8.6, 10.5, 10.2, 10.5, 10.0, 8.8])
B = np.array([4.8, 2.1, 5.1, 2.0, 4.0, 1.0, 3.4, 2.7, 5.1, 1.4, 1.6])
print('Ein Durchschnitt:', np.mean(A))
print('B Durchschnitt:', np.mean(B))
stats.ttest_ind(A, B)
Ausführungsergebnis
Durchschnitt: 9.28
B Durchschnitt: 3.0181818181818185
Ttest_indResult(statistic=9.851086859836649, pvalue=6.698194360479442e-09)
#Welch's t Test
import numpy as np
from scipy import stats
A = np.array([13.8, 10.2, 4.6, 10.0, 4.2, 16.1, 14.4, 4.9, 7.7, 11.4])
B = np.array([3.3, 2.6, 4.0, 4.7, 1.9, 2.9, 4.7, 5.3, 4.3, 3.0, 2.0])
print('Ein Durchschnitt:', np.mean(A))
print('B Durchschnitt:', np.mean(B))
stats.ttest_ind(A, B, equal_var=False)
Ausführungsergebnis
Durchschnitt: 9.73
B Durchschnitt: 3.5181818181818176
Ttest_indResult(statistic=4.426442804187721, pvalue=0.0012285738375064346)
import numpy as np
from scipy import stats
A = np.array([1.83, 1.50, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.30, 2.01, 3.11])
B = np.array([0.88, 0.65, 0.60, 1.05, 1.06, 1.29, 1.06, 2.14, 1.29])
print('Ein Durchschnitt:', np.mean(A))
print('B Durchschnitt:', np.mean(B))
stats.mannwhitneyu(A, B, alternative='two-sided')
Ausführungsergebnis
Ein Durchschnitt: 2.0018181818181815
B Durchschnitt: 1.1133333333333333
MannwhitneyuResult(statistic=91.0, pvalue=0.0018253610099931035)
mannwhitneyu
verwendet wird, da es mit dem U-Test von Manwhitney identisch ist.import numpy as np
from scipy import stats
A = np.array([1.83, 1.50, 1.62, 2.48, 1.68, 1.88, 1.55, 3.06, 1.30])
B = np.array([0.88, 0.65, 0.60, 1.05, 1.06, 1.29, 1.06, 2.14, 1.29])
print('Ein Durchschnitt:', np.mean(A))
print('B Durchschnitt:', np.mean(B))
stats.wilcoxon(A, B)
Ausführungsergebnis
Ein Durchschnitt: 1.8777777777777775
B Durchschnitt: 1.1133333333333333
WilcoxonResult(statistic=0.0, pvalue=0.007685794055213263)
#Chi-Quadrat-Test
import numpy as np
import pandas as pd
from scipy import stats
#Beispieldaten
sex = np.random.choice(['male', 'female'], size=20)
vote = np.random.choice(['agree', 'against'], size=20)
cross = pd.crosstab(index=sex, columns=vote)
print(cross)
x2, p, dof, expected = stats.chi2_contingency(cross, correction=False)
print("Chi-Quadrat-Wert:", x2)
print("p-Wert:", p)
print("Der Freiheitsgrad", dof)
print(expected)
Ausführungsergebnis
vote against agree
sex
female 5 5
male 6 4
Chi-Quadrat-Wert: 0.20202020202020202
p-Wert: 0.653095114932182
1 Freiheitsgrad
[[5.5 4.5]
[5.5 4.5]]
Korrektur = Falsch
gibt an, dass keine Korrektur durchgeführt wird.#Registrierung von Testdaten
import pandas as pd
import numpy as np
data = pd.DataFrame({'output': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
'input01': [1, 3, 5, 6, 10, 14, 8, 17, 15, 20],
'input02': [5, 10, 20, 30, 35, 35, 50, 70, 85, 100]},)
data.head()
#Einfache Regressionsanalyse mit input01 und output
from sklearn import linear_model
model = linear_model.LinearRegression()
#Verwenden Sie input01 als erklärende Variable
X = data.loc[:, ['input01']].values
#Verwenden Sie die Ausgabe als Zielvariable
Y = data['output'].values
#Erstellen Sie ein Vorhersagemodell
model.fit(X, Y)
print('Modellparameter:', model.get_params())
print('Regressionskoeffizienten:', model.coef_)
print('Sektion(Error):', model.intercept_)
print('Entscheidungskoeffizient(X,Korrelation von Y.):', model.score(X, Y))
print('Regressionsformel:[alcohol] = %s × [density] + %s' % (model.coef_[0], model.intercept_))
Ausführungsergebnis
Modellparameter: {'copy_X': True, 'fit_intercept': True, 'n_jobs': None, 'normalize': False}
Regressionskoeffizienten: [4.45327487]
Sektion(Error): 10.912578788709233
Entscheidungskoeffizient(X,Korrelation von Y.): 0.8771602016326598
Regressionsformel:[alcohol] = 4.45327486982735 × [density] + 10.912578788709233
#Regressionsanalyse unter Verwendung von Statistikmodellen
import statsmodels.api as sm
model = sm.OLS(Y, sm.add_constant(X))
result = model.fit(disp=0)
print(result.summary())
Ausführungsergebnis
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.877
Model: OLS Adj. R-squared: 0.862
Method: Least Squares F-statistic: 57.13
Date: Fri, 20 Mar 2020 Prob (F-statistic): 6.56e-05
Time: 23:33:37 Log-Likelihood: -37.282
No. Observations: 10 AIC: 78.56
Df Residuals: 8 BIC: 79.17
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const 10.9126 6.833 1.597 0.149 -4.845 26.670
x1 4.4533 0.589 7.558 0.000 3.095 5.812
==============================================================================
Omnibus: 5.725 Durbin-Watson: 2.878
Prob(Omnibus): 0.057 Jarque-Bera (JB): 2.315
Skew: 1.150 Prob(JB): 0.314
Kurtosis: 3.513 Cond. No. 22.4
==============================================================================
#Grafik
import matplotlib.pyplot as plt
#Streudiagramm
plt.scatter(X, Y)
#Gerade zurückgeben
plt.plot(X, model.predict(X), color='black')
#Normalisierte und multiple Regressionsanalyse
from sklearn import linear_model
model = linear_model.LinearRegression()
#Normalisieren Sie jede Spalte im Datenrahmen
data2 = data.apply(lambda x: (x - np.mean(x)) / (np.max(x) - np.min(x)))
data2.head()
#Verwenden Sie eine andere als die Ausgabe als erklärende Variable
data2_except_output = data2.drop("output", axis=1)
X = data2_except_output
#Verwenden Sie die Ausgabe als Zielvariable
Y = data2['output'].values
#Erstellen Sie ein Vorhersagemodell
model.fit(X, Y)
#Partieller Regressionskoeffizient
print(pd.DataFrame({"name":data2_except_output.columns,
"result":np.abs(model.coef_)}).sort_values(by='result') )
print('Sektion(Error):', model.intercept_)
Ausführungsergebnis
name result
0 input01 0.295143
1 input02 0.707205
Sektion(Error): 1.6679414843100476e-17
#Multiple Regressionsanalyse unter Verwendung von Statistikmodellen
import statsmodels.api as sm
#Erstellen Sie ein Vorhersagemodell
model = sm.OLS(Y, sm.add_constant(X))
result = model.fit(disp=0)
print(result.summary())
Ausführungsergebnis
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.962
Model: OLS Adj. R-squared: 0.951
Method: Least Squares F-statistic: 87.64
Date: Fri, 20 Mar 2020 Prob (F-statistic): 1.11e-05
Time: 23:36:48 Log-Likelihood: 13.530
No. Observations: 10 AIC: -21.06
Df Residuals: 7 BIC: -20.15
Df Model: 2
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const -1.388e-17 0.024 -5.87e-16 1.000 -0.056 0.056
input01 0.2951 0.180 1.636 0.146 -0.132 0.722
input02 0.7072 0.180 3.923 0.006 0.281 1.133
==============================================================================
Omnibus: 6.793 Durbin-Watson: 1.330
Prob(Omnibus): 0.033 Jarque-Bera (JB): 2.620
Skew: 1.171 Prob(JB): 0.270
Kurtosis: 3.896 Cond. No. 10.5
==============================================================================
#Registrierung von Testdaten
import pandas as pd
import numpy as np
data = pd.DataFrame({'Sex': [1, 1, 0, 1, 0, 0, 1, 1, 0, 0],
'Schüler': [0, 0, 0, 0, 1, 0, 0, 1, 0, 1],
'Zeit bleiben()': [34, 28, 98, 70, 67, 23, 67, 56, 41, 90],
'': [0, 0, 1, 0, 1, 0, 1, 1, 0, 1]},)
data
#
from sklearn.linear_model import LogisticRegression
import statsmodels.api as sm
#
X = data[['', '', 'Logistische Regressionsanalyse unter Verwendung von Statistikmodellen für die Benutzerregistrierung Verwenden Sie andere als die Benutzerregistrierung für erklärende Variablen(Sekunden)']]
#Verwenden Sie die Benutzerregistrierung für die Zielvariable
Y = data['Benutzer Registration'].values
model = sm.Logit(Y, sm.add_constant(X))
result = model.fit(disp=0)
print('---Zusammenfassung---')
print(result.summary())
print('---Quoten protokollieren---')
print(result.params)
print('---p-Wert---')
print(result.pvalues)
print('---Wie groß ist die Wahrscheinlichkeit, dass ein Ereignis auftritt, wenn die Variable um 1 Einheit erhöht wird?%Wird auf erhöhen(Quantitative Evaluation)---')
print('Zeit bleiben(Sekunden):', 1 / (1 + np.exp(-result.params['Zeit bleiben(Sekunden)'])))
print('Zeit bleiben(Sekunden):', np.exp(result.params['Zeit bleiben(Sekunden)']) / (1 + np.exp(result.params['Zeit bleiben(Sekunden)'])))
print('---Wie oft die Wahrscheinlichkeit, dass ein Ereignis auftritt, wenn die Variable 1 wird, ist die Wahrscheinlichkeit, dass ein Ereignis nicht auftritt(Qualifikation)---')
print('Sex:', np.exp(result.params['Sex']))
print('Schüler:', np.exp(result.params['Schüler']))
Ausführungsergebnis
---Zusammenfassung---
Logit Regression Results
==============================================================================
Dep. Variable: y No. Observations: 10
Model: Logit Df Residuals: 6
Method: MLE Df Model: 3
Date: Fri, 20 Mar 2020 Pseudo R-squ.: 0.7610
Time: 10:12:42 Log-Likelihood: -1.6565
converged: False LL-Null: -6.9315
Covariance Type: nonrobust LLR p-value: 0.01443
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
const -9.5614 10.745 -0.890 0.374 -30.622 11.499
Geschlecht 0.1543 5.170 0.030 0.976 -9.979 10.287
Student 22.7574 3.26e+04 0.001 0.999 -6.38e+04 6.38e+04
Zeit bleiben(Sekunden) 0.1370 0.139 0.988 0.323 -0.135 0.409
==============================================================================
Possibly complete quasi-separation: A fraction 0.30 of observations can be
perfectly predicted. This might indicate that there is complete
quasi-separation. In this case some parameters will not be identified.
---Quoten protokollieren---
const -9.561361
Geschlecht 0.154283
Student 22.757416
Zeit bleiben(Sekunden) 0.136965
dtype: float64
---p-Wert---
const 0.373568
Geschlecht 0.976193
Schüler 0.999442
Zeit bleiben(Sekunden) 0.323037
dtype: float64
---Wie groß ist die Wahrscheinlichkeit, dass ein Ereignis auftritt, wenn die Variable um 1 Einheit erhöht wird?%Wird auf erhöhen(Quantitative Evaluation)---
Zeit bleiben(Sekunden): 0.5341877701226888
Zeit bleiben(Sekunden): 0.5341877701226888
---Wie oft die Wahrscheinlichkeit, dass ein Ereignis auftritt, wenn die Variable 1 wird, ist die Wahrscheinlichkeit, dass ein Ereignis nicht auftritt(Qualifikation)---
Sex: 1.1668207000698392
Schüler: 7645749443.830123