Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python

introduction

Introduction à la vérification de l'efficacité - Raisonnement causal pour une comparaison correcte / Bases de l'économie quantitative Reproduire le code source en Python Faire.

J'ai déjà un Exemple d'implémentation de grand ancêtre, mais je le laisserai comme mémo pour mon étude.

Cet article couvre le chapitre 2. Le code est également posté sur github. De plus, les noms de variables et le contenu du traitement sont essentiellement implémentés dans le livre.

analyse de régression

Vous pouvez implémenter une régression linéaire avec des modèles scicit-learn ou stats. Cependant, en ce qui concerne les statistiques de chaque variable, statsmodels est plus avantageux, donc c'est plus pratique.

scikit-learn

Analyse de régression de sklearn


from sklearn.linear_model import LinearRegression

#Apprentissage de modèle
X = biased_data[['treatment', 'history']]
y = biased_data['spend']
model = LinearRegression(fit_intercept=True, normalize=False).fit(X, y)

#Sortie de résultat
print(f'R^2: {model.score(X, y)}')
print(f'intercept: {model.intercept_}')
print(f'coefficients: {model.coef_}')

Le résultat de scikit-learn est inférieur à celui des modèles de statistiques décrits plus loin. Il est possible de calculer chaque valeur statistique en fonction des données d'entraînement, mais il semble qu'il n'y ait aucun intérêt à utiliser scikit-learn jusqu'à ce point.

statsmodels

Il semble y avoir plusieurs façons d'apprendre des modèles à l'aide de modèles de statistiques, mais ceux de type R sont les suivants.

Analyse de régression des modèles de statistiques


from statsmodels.formula.api import ols

#Apprentissage de modèle
model = ols('spend ~ treatment + history', data=biased_data).fit()

#Sortie de résultat
model.summary()

En passant, si la sortie du résultat est comme model.summary (). Tables [1], vous pouvez spécifier n'importe quelle table à partir de plusieurs informations.

De plus, si vous souhaitez obtenir une estimation, vous pouvez utiliser model.params pour faire référence à la liste au format dictionnaire.

Lire RData

Pour lire les données au format R, utilisez rdata. Pour plus de détails sur l'utilisation du module, consultez ici.

Lire RData


import rdata

parsed = rdata.parser.parse_file('./vouchers.rda')
converted = rdata.conversion.convert(parsed)
vouchers = converted['vouchers']

Analyse de régression collective

Dans ce livre, nous apprenons les modèles de plusieurs variables objectives à la fois, mais il semble difficile de faire de même en Python.

Analyse de régression collective


import pandas as pd
from statsmodels.formula.api import ols

#Définition de l'équation de régression
formula_x_base = ['VOUCH0']
formula_x_covariate = [
    'SVY', 'HSVISIT', 'AGE', 'STRATA1', 'STRATA2', 'STRATA3', 'STRATA4', 'STRATA5', 'STRATA6', 'STRATAMS',
    'D1993', 'D1995', 'D1997', 'DMONTH1', 'DMONTH2', 'DMONTH3', 'DMONTH4', 'DMONTH5', 'DMONTH6',
    'DMONTH7', 'DMONTH8', 'DMONTH9', 'DMONTH10', 'DMONTH11', 'DMONTH12', 'SEX2',
]
formula_ys = [
    "TOTSCYRS","INSCHL","PRSCH_C","USNGSCH","PRSCHA_1","FINISH6","FINISH7","FINISH8","REPT6",
    "REPT","NREPT","MARRIED","HASCHILD","HOURSUM","WORKING3",
]

#Définition de la fonction qui reçoit le résultat de la régression
def get_regression_result(formula, data):
  model = ols(formula, data=data).fit()
  result = pd.read_html(model.summary().tables[1].as_html(), header=0)[0]
  result.columns = ['term', 'estimate', 'std.err', 'statistic', 'p.value', '0.025', '0.975']
  result
  return result

#Effectuer une analyse de régression collectivement
results = list()
for formula_y in formula_ys:
  base_reg_formula = f'{formula_y} ~ {" + ".join(formula_x_base)}'
  base_reg_model_index = f'{formula_y}_base'
  covariate_reg_formula = f'{formula_y} ~ {" + ".join(formula_x_base+formula_x_covariate)}'
  covariate_reg_model_index = f'{formula_y}_covariate'

  base_reg_result = get_regression_result(base_reg_formula, regression_data)
  base_reg_result['model_index'] = base_reg_model_index
  results.append(base_reg_result)
  
  covariate_reg_result = get_regression_result(covariate_reg_formula, regression_data)
  covariate_reg_result['model_index'] = covariate_reg_model_index
  results.append(covariate_reg_result)

df_results = pd.concat(results).reset_index(drop=True)
df_results = df_results[['model_index', 'term', 'estimate', 'std.err', 'statistic', 'p.value', '0.025', '0.975']]

Graphique de la relation entre l'intervention et la variable objective

Probablement facile à tracer avec des barres d'erreur dans matplotlib. Le but est de trouver l'amplitude de l'erreur dans la barre d'erreur utilisée pour exprimer l'intervalle de confiance à partir de la différence entre la valeur estimée et l'intervalle de confiance.

Dans les données utilisées pour le dessin (non illustrées ici), la valeur est obtenue à partir du modèle, mais comme le nombre de nombres valides à ce moment-là est petit, il peut y avoir un certain écart.

terrain


import matplotlib.pyplot as plt

estimate = going_private_results['estimate']
estimate_error = going_private_results['estimate'] - going_private_results['0.025']  #Supposons que la différence entre l'intervalle de confiance et la valeur estimée soit la longueur de la barre d'erreur

xmin = 0
xmax = going_private_results.shape[0] - 1

plt.errorbar(range(xmax+1), estimate, estimate_error, fmt='o')
plt.hlines(y=0, xmin=xmin, xmax=xmax, colors='k', linestyles='dashed')
plt.xlabel('model_indexe')
plt.ylabel('estimate')
plt.xticks(range(going_private_results.shape[0]), going_private_results['model_index'], rotation=45)
plt.show()

Relation

Recommended Posts

Introduction à la vérification de l'efficacité Chapitre 3 écrit en Python
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Introduction à la vérification des effets Rédaction des chapitres 4 et 5 en Python
J'ai écrit "Introduction à la vérification des effets" en Python
[Introduction à Python3 Jour 13] Chapitre 7 Chaînes de caractères (7.1-7.1.1.1)
[Introduction à Python3 Jour 14] Chapitre 7 Chaînes de caractères (7.1.1.1 à 7.1.1.4)
[Introduction à Python3 Jour 15] Chapitre 7 Chaînes de caractères (7.1.2-7.1.2.2)
[Introduction à Python3 Day 21] Chapitre 10 Système (10.1 à 10.5)
"Introduction à la vérification des effets Chapitre 3 Analyse utilisant le score de propension" + α est essayé en Python
Code de vérification de la série Fourier écrit en Python
[Introduction à Python] Comment utiliser la classe en Python?
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
[Introduction à Python3 Day 18] Chapitre 8 Destinations de données (8.3.6.2 à 8.3.6.3)
Introduction aux vecteurs: Algèbre linéaire en Python <1>
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
tse --Introduction à l'éditeur de flux de texte en Python
Introduction au langage Python
[Introduction à Python3, jour 22] Chapitre 11 Traitement parallèle et mise en réseau (11.1 à 11.3)
Introduction à OpenCV (python) - (2)
[Introduction à Python3, Jour 23] Chapitre 12 Devenir un Paisonista (12.1 à 12.6)
[Introduction à Python3 Jour 20] Chapitre 9 Démêler le Web (9.1-9.4)
[Introduction à Python3 Jour 8] Chapitre 4 Py Skin: Structure du code (4.1-4.13)
Analyser une chaîne JSON écrite dans un fichier en Python
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Introduction à Python Django (2) Win
Pour vider stdout en Python
Connectez-vous au site Web en Python
Introduction à la communication série [Python]
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)
Gacha écrit en Python -BOX Gacha-
Une introduction à la programmation Python
Comment développer en Python
Introduction à Python pour, pendant
Publier sur Slack en Python
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
[Introduction à Python3 Jour 3] Chapitre 2 Composants Py: valeurs numériques, chaînes de caractères, variables (2.2 à 2.3.6)
[Introduction à Python3 Jour 4] Chapitre 2 Composants Py: valeurs numériques, chaînes de caractères, variables (2.3.7 à 2.4)
introduction
[Introduction à Python3 Day 21] Chapitre 10 Système (10.1 à 10.5)
estimation personnelle en temps réel (apprentissage)
kivy introduction
Cool Lisp écrit en Python: Hy
[Présentation de l'application Udemy Python3 +] 58. Lambda
[Présentation de l'application Udemy Python3 +] 31. Commentaire
[Python] Comment faire PCA avec Python
Entraine toi! !! Introduction au type Python (conseils de type)
[Introduction à Python3 Jour 1] Programmation et Python
Convertir Markdown en PDF en Python
Comment collecter des images en Python
100 Language Processing Knock Chapitre 1 en Python
[Introduction à Python] <numpy ndarray> [modifier le 22/02/2020]
[Présentation de l'application Udemy Python3 +] 57. Décorateur
Introduction à Python Hands On Partie 1
Comment utiliser SQLite en Python
[Introduction à Python] Comment analyser JSON
[Présentation de l'application Udemy Python3 +] 56. Clôture
Dans la commande python, python pointe vers python3.8