Je pense qu'il est très important de vérifier l'effet après avoir mené divers essais avec les services WEB. Je pense que les statistiques de base peuvent être pleinement utilisées comme méthode. Cette fois, nous avons résumé la méthode d'analyse des données statistiques à l'aide de Python + Jupyter Lab (Docker) dans le but de vérifier l'effet de la production d'essai qui peut être utilisée dans les entreprises à partir de statistiques de base et d'analyse de données.
Veuillez également vous référer au notebook utilisé cette fois-ci. https://github.com/hikarut/Data-Science/tree/master/notebooks/statisticsSample
On suppose que Jupyter Lab peut être utilisé avec Docker en se référant à ce qui suit. Utiliser la liaison de clé vim dans JupyterLab démarré avec Docker
- | Variables explicatives qualitatives (2 classifications) |
Variables explicatives quantitatives (Cas multiples, y compris la quantité et la qualité) |
---|---|---|
Résultat quantitatif(Numérique) | Test T pour la différence entre les valeurs moyennes (ou le test de somme des rangs de Wilcoxon) |
Analyse de régression multiple |
Résultat qualitatif(Type de classification) | Test Z pour la différence de proportion (Identique au test du chi carré) |
Analyse de régression logistique |
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 échantillon de test t
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('Moyenne mère:', np.mean(coffee))
print('Valeur T avec une moyenne de population de 200:', t)
print('Probabilité que la population moyenne soit de 200(valeur p):', p)
Résultat d'exécution
Population moyenne: 204.96666666666664
Valeur T avec une moyenne de population de 200: 2.751076959309973
Probabilité que la population moyenne soit de 200(valeur p): 0.015611934395473872
#Test t apparié
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('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.ttest_rel(A, B)
Résultat d'exécution
Une moyenne: 0.75
Moyenne B: 2.3299999999999996
Ttest_relResult(statistic=-4.062127683382037, pvalue=0.00283289019738427)
#Test t de l'étudiant
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('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.ttest_ind(A, B)
Résultat d'exécution
Une moyenne: 9.28
Moyenne B: 3.0181818181818185
Ttest_indResult(statistic=9.851086859836649, pvalue=6.698194360479442e-09)
#Test t de Welch
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('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.ttest_ind(A, B, equal_var=False)
Résultat d'exécution
Une moyenne: 9.73
Moyenne B: 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('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.mannwhitneyu(A, B, alternative='two-sided')
Résultat d'exécution
Une moyenne: 2.0018181818181815
Moyenne B: 1.1133333333333333
MannwhitneyuResult(statistic=91.0, pvalue=0.0018253610099931035)
mannwhitneyu
est utilisé car il est identique au test U de Manwhitney.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('Une moyenne:', np.mean(A))
print('Moyenne B:', np.mean(B))
stats.wilcoxon(A, B)
Résultat d'exécution
Une moyenne: 1.8777777777777775
Moyenne B: 1.1133333333333333
WilcoxonResult(statistic=0.0, pvalue=0.007685794055213263)
wilcoxon
#Test du chi carré
import numpy as np
import pandas as pd
from scipy import stats
#Exemple de données
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("Valeur chi carré:", x2)
print("valeur p:", p)
print("Le degré de liberté", dof)
print(expected)
Résultat d'exécution
vote against agree
sex
female 5 5
male 6 4
Valeur chi carré: 0.20202020202020202
valeur p: 0.653095114932182
1 degré de liberté
[[5.5 4.5]
[5.5 4.5]]
correction = False
indique qu'aucune correction n'est effectuée.#Enregistrement des données de test
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()
#Analyse de régression simple avec input01 et output
from sklearn import linear_model
model = linear_model.LinearRegression()
#Utilisez input01 comme variable explicative
X = data.loc[:, ['input01']].values
#Utiliser la sortie comme variable objectif
Y = data['output'].values
#Créer un modèle prédictif
model.fit(X, Y)
print('Paramètres du modèle:', model.get_params())
print('Coefficient de régression:', model.coef_)
print('Section(Erreur):', model.intercept_)
print('Coefficient de décision(X,Corrélation de Y):', model.score(X, Y))
print('Formule de régression:[alcohol] = %s × [density] + %s' % (model.coef_[0], model.intercept_))
Résultat d'exécution
Paramètres du modèle: {'copy_X': True, 'fit_intercept': True, 'n_jobs': None, 'normalize': False}
Coefficient de régression: [4.45327487]
Section(Erreur): 10.912578788709233
Coefficient de décision(X,Corrélation de Y): 0.8771602016326598
Formule de régression:[alcohol] = 4.45327486982735 × [density] + 10.912578788709233
#Analyse de régression à l'aide de modèles de statistiques
import statsmodels.api as sm
model = sm.OLS(Y, sm.add_constant(X))
result = model.fit(disp=0)
print(result.summary())
Résultat d'exécution
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
==============================================================================
#Graphisme
import matplotlib.pyplot as plt
#Nuage de points
plt.scatter(X, Y)
#Retour en ligne droite
plt.plot(X, model.predict(X), color='black')
#Analyse de régression normalisée et multiple
from sklearn import linear_model
model = linear_model.LinearRegression()
#Normaliser chaque colonne du bloc de données
data2 = data.apply(lambda x: (x - np.mean(x)) / (np.max(x) - np.min(x)))
data2.head()
#Utiliser autre que la sortie comme variable explicative
data2_except_output = data2.drop("output", axis=1)
X = data2_except_output
#Utiliser la sortie comme variable objectif
Y = data2['output'].values
#Créer un modèle prédictif
model.fit(X, Y)
#Coefficient de régression partiel
print(pd.DataFrame({"name":data2_except_output.columns,
"result":np.abs(model.coef_)}).sort_values(by='result') )
print('Section(Erreur):', model.intercept_)
Résultat d'exécution
name result
0 input01 0.295143
1 input02 0.707205
Section(Erreur): 1.6679414843100476e-17
#Analyse de régression multiple à l'aide de modèles de statistiques
import statsmodels.api as sm
#Créer un modèle prédictif
model = sm.OLS(Y, sm.add_constant(X))
result = model.fit(disp=0)
print(result.summary())
Résultat d'exécution
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
==============================================================================
Scikit-learn
est souvent utilisé pour le machine learning, et stats models
est souvent utilisé pour les statistiques. Avec scikit-learn
, vous devez calculer vous-même la valeur p, mais les stats models
la calculeront automatiquement.#Enregistrement des données de test
import pandas as pd
import numpy as np
data = pd.DataFrame({'sexe': [1, 1, 0, 1, 0, 0, 1, 1, 0, 0],
'étudiant': [0, 0, 0, 0, 1, 0, 0, 1, 0, 1],
'Rester le temps(Secondes)': [34, 28, 98, 70, 67, 23, 67, 56, 41, 90],
'Enregistrement de l'utilisateur': [0, 0, 1, 0, 1, 0, 1, 1, 0, 1]},)
data
#Analyse de régression logistique à l'aide de modèles de statistiques
from sklearn.linear_model import LogisticRegression
import statsmodels.api as sm
#Utiliser autre que l'enregistrement de l'utilisateur pour les variables explicatives
X = data[['sexe', 'étudiant', 'Rester le temps(Secondes)']]
#Utiliser l'enregistrement de l'utilisateur pour la variable objective
Y = data['Enregistrement de l'utilisateur'].values
model = sm.Logit(Y, sm.add_constant(X))
result = model.fit(disp=0)
print('---résumé---')
print(result.summary())
print('---Enregistrer les cotes---')
print(result.params)
print('---valeur p---')
print(result.pvalues)
print('---Quelle est la probabilité qu'un événement se produise lorsque la variable est augmentée d'une unité?%Augmentera à(Évaluation quantitative)---')
print('Rester le temps(Secondes):', 1 / (1 + np.exp(-result.params['Rester le temps(Secondes)'])))
print('Rester le temps(Secondes):', np.exp(result.params['Rester le temps(Secondes)']) / (1 + np.exp(result.params['Rester le temps(Secondes)'])))
print('---Combien de fois la probabilité qu'un événement se produise lorsque la variable devient 1 est la probabilité qu'un événement ne se produise pas(Qualification)---')
print('sexe:', np.exp(result.params['sexe']))
print('étudiant:', np.exp(result.params['étudiant']))
Résultat d'exécution
---résumé---
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
Sexe 0.1543 5.170 0.030 0.976 -9.979 10.287
Étudiant 22.7574 3.26e+04 0.001 0.999 -6.38e+04 6.38e+04
Rester le temps(Secondes) 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.
---Enregistrer les cotes---
const -9.561361
Sexe 0.154283
Étudiant 22.757416
Rester le temps(Secondes) 0.136965
dtype: float64
---valeur p---
const 0.373568
Sexe 0.976193
Étudiant 0.999442
Rester le temps(Secondes) 0.323037
dtype: float64
---Quelle est la probabilité qu'un événement se produise lorsque la variable est augmentée d'une unité?%Augmentera à(Évaluation quantitative)---
Rester le temps(Secondes): 0.5341877701226888
Rester le temps(Secondes): 0.5341877701226888
---Combien de fois la probabilité qu'un événement se produise lorsque la variable devient 1 est la probabilité qu'un événement ne se produise pas(Qualification)---
sexe: 1.1668207000698392
étudiant: 7645749443.830123