[PYTHON] Estimation de l'effet des mesures à l'aide des scores de propension

introduction

Le raisonnement causal statistique (ci-après dénommé raisonnement causal) est un cadre permettant d'estimer plus précisément les effets des mesures et des traitements dans les domaines du marketing et des soins médicaux. En particulier,

Je vais résumer brièvement.

Récemment, un livre d'introduction très facile à comprendre sur le raisonnement causal ([Introduction to Effectiveness Verification-Causal Reasoning for Correct Comparison / Basics of Quantitative Economics](https://gihyo.jp/book/2020/978-4-297-] Depuis la publication de 11117-5)), je pense que le raisonnement causal a également acquis la citoyenneté.

Quand utiliser le raisonnement causal

** Lorsque vous utilisez le raisonnement causal, vous ne pouvez pas faire le test AB, mais vous souhaitez estimer plus précisément l'effet des interventions (mesures marketing et traitements) **

Le test AB (également appelé essai contrôlé randomisé (ECR)) attribue au hasard les sujets à deux groupes, un groupe intervient et l'autre intervient. Au lieu de cela, l'effet de l'intervention est estimé en comparant les résultats des deux groupes. En attribuant au hasard les sujets à deux groupes et en créant des groupes homogènes dans les deux groupes sauf avec ou sans intervention, l'effet moyen de l'intervention peut être estimé par une simple différence entre les résultats des deux groupes. Par exemple, comme le montre la figure ci-dessous, lorsque le courrier est livré à la moitié des utilisateurs sélectionnés au hasard et que le courrier n'est pas livré à l'autre moitié des utilisateurs, la différence dans le nombre moyen de réservations pour chaque groupe (= réservation moyenne). (Augmentation du nombre) sera l'effet des mesures de distribution du courrier. ABtest.JPG

Cependant, en raison du coût de réalisation du test AB, si la cible d'intervention est déterminée par une logique non aléatoire, l'effet de l'intervention ne peut pas être estimé par la méthode ci-dessus.

Par exemple, si vous souhaitez estimer l'efficacité d'une mesure marketing, mais que vous souhaitez réduire de moitié le nombre de personnes pour mettre en œuvre la mesure, il y a de fortes chances que des pertes d'opportunités (diminution des ventes, etc.) se produisent. Il est également applicable (au sens large) lorsqu'il est éthique de sélectionner au hasard une cible de traitement, par exemple lorsque vous souhaitez estimer l'effet du traitement.

** Lorsque les résultats du groupe d'intervention et du groupe non-intervention sont simplement comparés lorsque le test AB n'est pas réalisé, les effets (biais) autres que l'intervention ne peuvent être exclus et l'effet de l'intervention est sous-estimé (ou surestimé). Il est possible que ce soit fait. ** **

Prenons un exemple de mesures de distribution du courrier. Supposons que vous implémentiez des mesures telles que l'apprentissage automatique pour prédire si un utilisateur effectuera ou non une réservation et enverra un e-mail à un utilisateur avec un score prévu élevé. À ce stade, l'utilisateur qui est la cible de la distribution du courrier peut être considéré comme ayant un attribut qui facilite la réservation. À ce stade, peut-on dire que la simple différence entre le nombre de réservations pour les cibles de livraison de courrier et le nombre de réservations pour les cibles de livraison non courrier est l'effet de la livraison de courrier? La réponse est probablement NON. La raison en est que le courrier est livré aux utilisateurs qui ont des attributs qui sont faciles à faire des réservations en premier lieu, et on s'attend à ce que le nombre de réservations pour les personnes cibles de livraison du courrier soit élevé en conséquence, de sorte que l'effet de la livraison du courrier sera dû à l'influence d'attributs autres que la livraison du courrier. C'est parce qu'il est surestimé. biased_test.JPG

De plus, lorsque l'on souhaite estimer l'effet de TV CM, la présence ou l'absence d'intervention est décidée par l'intention de la personne cible (c'est à l'individu de voir ou de ne pas regarder le CM, et la personne qui diffuse le CM décide qui va regarder le CM. Même si cela n'est pas possible, une simple comparaison entre le groupe d'intervention et le groupe non intervenant peut surestimer (ou sous-estimer) l'efficacité de l'intervention car la présence ou l'absence d'intervention n'est pas déterminée au hasard.

Même dans les cas ci-dessus, le raisonnement causal est la méthodologie pour estimer l'effet de l'intervention.

Méthode de pondération de probabilité inverse utilisant le score de propension

Ici, nous allons expliquer la pondération de probabilité inverse (IPW), qui est l'une des méthodes d'inférence causale, en utilisant des scores de propension.

** Le score de propension est la probabilité que le sujet $ i $ appartienne à un groupe (groupe de traitement) avec intervention **, et "les informations générales (attribut) du sujet $ i $ ressemblent à ceci, donc le sujet $ i $ La probabilité d'appartenir au groupe de traitement (facilité d'être affecté au groupe de traitement) est à peu près à ce sujet. " Dans la formule, le score de propension $ e_i $ de la personne cible $ i $ est

e_i = P(Z_i =1| X=x_i)

est. $ Z_i $ est une variable qui représente le regroupement du sujet $ i $ ($ Z_i = 1 $ appartient au groupe d'intervention (groupe de traitement), $ Z_i = 0 $ appartient au groupe de contrôle (pas de groupe d'intervention)) , $ X_i $ représentent les informations de fond (appelées covariables) du sujet $ i $.

Jusqu'à présent, j'ai expliqué que l'effet de l'intervention "moyenne" est estimé sans préavis. La raison en est qu'il n'est pas possible d'estimer l'effet de l'intervention au niveau individuel (appelé problème fondamental du raisonnement causal). En effet, il n'est pas possible de connaître le nombre de réservations lorsqu'un e-mail est remis à un utilisateur et le nombre de réservations lorsque l'e-mail n'est pas remis en même temps. Par conséquent, nous adoptons une approche pour estimer l'effet d'intervention moyen en formant un groupe homogène à l'exception de la présence ou de l'absence d'intervention.

Tout comme la valeur moyenne varie en fonction du groupe à agréger, l'effet moyen d'intervention diffère également en fonction du groupe d'intérêt. Les principaux sont les trois suivants.

Si vous écrivez chacun dans une formule,

ATE = E(Y_1) - E(Y_0) = \frac{\sum_{i=1}^{N} \frac{z_i}{e_i}y_i}{\sum_{j=1}^{N} \frac{z_j}{e_j}} - \frac{\sum_{i=1}^{N} \frac{1-z_i}{1-e_i}y_i}{\sum_{j=1}^{N} \frac{1-z_j}{1-e_j}}
ATT = E(Y_1 | Z=1) - E(Y_0 | Z=1) = \bar{y}_1 - \frac{\sum_{i=1}^{N} \frac{(1-z_i)e_i}{1-e_i}y_i}{\sum_{j=1}^{N} \frac{(1-z_j)e_j}{1-e_j}}
ATU = E(Y_1 | Z=0) - E(Y_0 | Z=0) = \frac{\sum_{i=1}^{N} \frac{z_i(1-e_i)}{e_i}y_i}{\sum_{j=1}^{N} \frac{z_j(1-e_j)}{e_j}} - \bar{y}_0

Et $ y_i $ représente la variable de résultat de la personne cible $ i $ (le montant pour lequel l'effet d'intervention est estimé. Également appelé le résultat. Dans l'exemple de livraison de courrier, le nombre de réservations).

Tous les ATE, ATT et ATU sont les différences entre les «résultats en intervenant dans le groupe d'intérêt (premier terme)» et les «résultats en n'intervenant pas dans le groupe d'intérêt (second terme)».

ATE se concentre sur l'ensemble du groupe. Le premier terme calcule la valeur moyenne des variables de résultat pondérée par l'inverse du score de propension pour le groupe de traitement (groupe de $ z_i = 1 ), et le deuxième terme est le groupe de contrôle ( z_i = 0 $). Pour le groupe), la valeur moyenne des variables de résultat pondérée par l'inverse de (score à 1) est calculée. Si le score de propension est interprété comme "ressemblance avec le groupe de traitement du sujet" et (score de 1-propension) comme "ressemblance avec le groupe témoin du sujet", le premier terme est neutre en divisant le groupe de traitement par "ressemblance avec le groupe de traitement". Il peut être considéré comme un groupe neutre (?) En divisant le groupe témoin par la «ressemblance au groupe témoin» dans le deuxième terme. En d'autres termes, nous estimons l'effet moyen de l'intervention sur l'ensemble de la population indépendamment de la présence ou de l'absence d'intervention.

** ATT ** se concentre sur le groupe de traitement, «Allongement de la variable de résultat en raison de l'intervention dans le groupe de traitement (= valeur réelle de la variable de résultat du groupe de traitement et de la variable de résultat lorsque le groupe de traitement n'est pas intervenu) Différence) ". Il est souvent utilisé ** pour estimer le rapport coût-efficacité d'une intervention, car il permet d'estimer les bénéfices directs de l'intervention. Le premier terme $ \ bar {y} _1 $ est la valeur moyenne (valeur réelle) des variables de résultat du groupe de traitement. Le deuxième terme calcule la valeur moyenne des variables de résultat pondérées par le score de propension / (score à 1 sujet) pour le groupe témoin (groupe de $ z_i = 0 $). Cela peut être interprété comme une estimation de la "variable de résultat lorsque le groupe de traitement n'est pas intervenu" en divisant la variable de résultat du groupe de contrôle par la "ressemblance avec le groupe de contrôle" et en multipliant par la "ressemblance avec le groupe de traitement".

** ATU ** se concentre sur le groupe de contrôle, «Allongement de la variable de résultat lors d'une intervention provisoire dans le groupe de contrôle (= variable de résultat lors d'une intervention provisoire dans le groupe de contrôle et la valeur réelle de la variable de résultat dans le groupe de contrôle) (Différence) ". En estimant l'effet de l'intervention dans un groupe qui n'intervient pas actuellement, il est souvent utilisé pour ** déterminer s'il faut élargir la portée de l'intervention à l'avenir **. Le premier terme calcule la valeur moyenne des variables de résultat pondérées par (score de 1) / score de propension pour le groupe de traitement (groupe de $ z_i = 1 $). Cela peut être interprété comme une estimation de la «variable de résultat lorsque le groupe de contrôle est provisoirement intervenu» en divisant la variable de résultat du groupe de traitement par la «ressemblance du groupe de traitement» et en multipliant par la «ressemblance du groupe de contrôle». Le deuxième terme $ \ bar {y} _0 $ est la valeur moyenne (valeur réelle) des variables de résultat du groupe de contrôle.

Procédure d'estimation de l'effet

Maintenant, estimons réellement l'effet de l'intervention. Ici, Iwanami DS vol.3 CM contact effect estimation data est utilisé, et CM contact donne à l'application l'utilisation. Implémentez l'estimation des effets en python. Ici, nous estimons combien le pourcentage de personnes qui utilisent réellement l'application a augmenté en diffusant un CM qui promeut l'utilisation de l'application. ATT est estimé afin d'estimer le profit direct (= taux d'augmentation des utilisateurs qui utilisent l'application) des mesures CM. La procédure d'estimation est la suivante.

  1. Construire un modèle d'estimation du score de propension
  2. Vérifier l'exactitude de l'estimation du modèle d'estimation du score de propension
  3. Calculer ATT

Ci-dessous le code.

--Importer les bibliothèques requises

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns

import statsmodels.api as sm
from sklearn.calibration import calibration_curve
from sklearn.metrics import roc_auc_score

import itertools
import time

--Lecture des données à utiliser

Soit $ Z $ la variable qui représente le groupe de «CM regardé / non regardé», et la covariable $ X $ pour le temps de visionnage TV, le sexe, l'âge, etc.

data = pd.read_csv('./q_data_x.csv')
X = data[['TVwatch_day', 'age', 'sex', 'marry_dummy', 'child_dummy', 'inc', 'pmoney','area_kanto', 'area_tokai', 'area_keihanshin', 
          'job_dummy1', 'job_dummy2', 'job_dummy3', 'job_dummy4', 'job_dummy5', 'job_dummy6', 'job_dummy7',
          'fam_str_dummy1', 'fam_str_dummy2', 'fam_str_dummy3', 'fam_str_dummy4']] #Covariable
Z = data['cm_dummy'] #Variables de groupe

--Estimation du score de propension

Estimez le score de propension pour chaque utilisateur à partir des covariables. Ici, nous utilisons la fonction Logit de la bibliothèque StatsModels pour construire un modèle d'estimation du score de propension par régression logistique.

exog = sm.add_constant(X) #Ajouter une section
logit_model = sm.Logit(endog=Z, exog=exog) #Retour logistique
logit_res = logit_model.fit()

--Confirmation de l'exactitude de l'estimation du score de propension

En regardant la précision de l'estimation avec le code ci-dessous, elle était AUC = 0,792. C'est une précision d'estimation raisonnable.

ps = logit_res.predict(exog)
print('AUC = {:.3f}'.format(roc_auc_score(y_true=Z, y_score=ps)))
#production:=> AUC = 0.792

Ensuite, dessinez un tracé d'étalonnage avec le code ci-dessous. Étant donné que le tracé d'étalonnage est à peu près sur la ligne de 45 degrés, il s'agit toujours d'une précision d'estimation raisonnable.

_, ax1 = plt.subplots(figsize=(10, 5))

prob_true, prob_pred = calibration_curve(y_true=Z, y_prob=ps, n_bins=20)
ax1.plot(prob_pred, prob_true, marker='o', label='calibration plot')
ax1.plot([0,1], [0,1], linestyle='--', color='black', label='ideal')
ax1.legend(bbox_to_anchor=(1.2, 0.9), loc='upper left', borderaxespad=0)
ax1.set_xlabel('predicted probability')
ax1.set_ylabel('true probability')

ax2 = ax1.twinx()
ax2.hist(ps, bins=20, histtype='step', rwidth=0.9)
ax2.set_ylabel('count')
plt.tight_layout()
plt.show()

calibration_plot.PNG

Estimer ATT. La variable de résultat à estimer est une variable factice d'utilisation de l'application (une variable qui prend 1 s'il y a une utilisation de l'application et 0 dans le cas contraire). En estimant ATT avec le code ci-dessous, l'effet de CM était d'environ 0,026 (± 0,013 est l'intervalle de confiance à 95% calculé par la méthode bootstrap). En d'autres termes, il a été constaté que le pourcentage d'utilisateurs qui utilisent l'application augmentera d'environ 2,6% en raison des mesures CM. (Il a été confirmé qu'il correspond à la valeur décrite dans Iwanami DS vol.3)

Y = data['gamedummy'] #Variable de résultat (cible estimée)
sample_size = len(data.loc[data['cm_dummy']==1])
ATT_list = []

for i in range(10000):
    idx1 = pd.Series(data.loc[data['cm_dummy']==1, 'gamedummy'].index).sample(n=sample_size, replace=True, random_state=i)
    idx0 = pd.Series(data.loc[data['cm_dummy']==0, 'gamedummy'].index).sample(n=sample_size, replace=True, random_state=i)
    
    Z_tmp = np.r_[Z[idx1], Z[idx0]]
    Y_tmp = np.r_[Y[idx1], Y[idx0]]
    ps_tmp = np.r_[ps[idx1], ps[idx0]]
    w01_tmp = (1-Z_tmp)*ps_tmp/(1-ps_tmp)
    
    E1 = np.mean(Y_tmp[Z_tmp==1])
    E0 = np.sum(Y_tmp * w01_tmp) / np.sum(w01_tmp)
    ATT = E1 - E0
    ATT_list.append(ATT)
    
print('ATT = {:.3f} ± {:.3f} (s.d.={:.3f})'.format(np.mean(ATT_list), np.std(ATT_list)*1.96, np.std(ATT_list)))
#production:=> ATT = 0.026 ± 0.013 (s.d.=0.006)

Confirmation de la distribution des covariables

Nous avons pu estimer ATT avec le code ci-dessus, mais allons plus loin pour voir si nous pouvions correctement estimer l'effet de l'intervention.

Lors de l'estimation du TCA, il est important d'estimer correctement le deuxième terme (la valeur moyenne des variables de résultat si le groupe de traitement n'est pas intervenu) en utilisant le score de propension. À cette fin, la «valeur de la variable de résultat du groupe témoin» est-elle bien ajustée à la «valeur de la variable de résultat lorsque le groupe de traitement n'est pas intervenu», c'est-à-dire que le contrôle est effectué en ajustant à l'aide du ** score de propension. Il est nécessaire de confirmer si les informations de base (covariables) des utilisateurs appartenant au groupe sont les mêmes que les informations de base (covariables) des utilisateurs appartenant au groupe de traitement **. Nous avons confirmé l'exactitude de l'estimation du score de propension, mais je pense que nous devrions donner la priorité à la confirmation de l'homogénéité de la distribution des covariables. Lors de la vérification, chaque covariable, comme la variable de résultat, est pondérée de manière appropriée avec un score de propension.

Maintenant, vérifions si la distribution des covariables dans chaque groupe est homogène en ajustant à l'aide du score de propension. Ici, nous utilisons un indice appelé différence moyenne standardisée (SMD). Lorsqu'il est écrit dans une formule,

SMD = \frac{\bar{x}_1 - \bar{x}_0}{\sigma_{pool}}
\sigma_{pool}^2 = \frac{(N_1-1)\sigma_1^2+(N_0-1)\sigma_0^2}{N_1+N_2-2}

est. La différence entre la valeur moyenne des covariables dans le groupe de traitement $ \ bar {x} \ _1 $ et la valeur moyenne des covariables dans le groupe de contrôle $ \ bar {x} \ 0 $ est regroupée sous forme de variance $ \ sigma {pool} ^ 2 Il peut être calculé en divisant par la racine carrée de $. $ \ Sigma_1 ^ 2 $ est la distribution des covariables du groupe de traitement, $ \ sigma_0 ^ 2 $ est la distribution des covariables du groupe de contrôle, $ N_1 $ est le nombre d'utilisateurs dans le groupe de traitement et $ N_0 $ est le nombre d'utilisateurs dans le groupe de contrôle. ..

Lorsque la différence entre les valeurs moyennes de chaque groupe est faible et que la variance est grande, SMD est un indice montrant que la distribution des covariables dans les deux groupes se chevauche fortement et que la différence dans la distribution des covariables est faible. Si vous souhaitez juger de la différence de distribution, vous pouvez effectuer le test de Kormogorov-Smirnov (test KS), mais comme il s’agit d’une méthode pour montrer qu ’« il existe une différence de distribution statistiquement significative », Je pense que c'est une mauvaise utilisation de l'utiliser pour indiquer que les distributions sont homogènes (il n'y a pas de différence dans les distributions).

Vérifions maintenant la différence moyenne standardisée (SMD) de chaque covariable. Le code ci-dessous définit d'abord une fonction qui calcule SMD (standard_mean_difference) et une fonction qui calcule SMD avant et après ajustement à l'aide des scores de propension (smd_on_the_treated). Ensuite, pour chaque covariable, le SMD avant et après ajustement à l'aide du score de propension est tracé. Cette intrigue s'appelle un complot d'amour.

def standardized_mean_difference(X1, X0): #Fonction pour calculer SMD
    N1 = len(X1)
    N0 = len(X0)
    s_pool = ((N1-1)*np.var(X1)+(N0-1)*np.var(X0))/(N1+N0-2)
    
    return (np.mean(X1)-np.mean(X0))/np.sqrt(s_pool)

def smd_on_the_treated(X, Z, ps): #Une fonction qui calcule la SMD avant et après ajustement à l'aide du score de propension
    X1 = X[Z==1]
    X0 = X[Z==0]
    ps0 = ps[Z==0]
    X10 = X0*ps0/(1-ps0)
    
    smd_before = standardized_mean_difference(X1, X0)
    smd_after = standardized_mean_difference(X1, X10)
    
    return smd_before, smd_after

#Calculer la DMS avant et après l'ajustement en utilisant le score de propension pour chaque covariable
smd_list = []
for name in X.columns:
    smd_before, smd_after = smd_on_the_treated(X=X[name], Z=Z, ps=ps)
    smd_list.append([name, smd_before, smd_after])
smd_df = pd.DataFrame(smd_list, columns=['covariate', 'SMD(before)', 'SMD(after)'])

#Pour chaque covariable, tracez le SMD avant et après l'ajustement en utilisant le score de propension (créez un diagramme d'amour)
plt.figure(figsize=(5, 10))
plt.scatter(smd_df['SMD(before)'], smd_df['covariate'], label='before')
plt.scatter(smd_df['SMD(after)'], smd_df['covariate'], label='after')
plt.vlines([0], ymin=-1, ymax=X.shape[1])
plt.legend()
plt.xlabel('standardized mean difference')
plt.ylabel('covariate')
plt.grid(True)
plt.show()

love_plot.png

Les points bleus indiquent le SMD entre les covariables pré-ajustées en utilisant le score de propension, et les points orange indiquent le SMD entre les covariables ajustées. En regardant cela, nous pouvons voir que le SMD est considérablement réduit en ajustant le temps de visionnage de la télévision (TVwatch_day) à l'aide du score de propension. Cependant, il existe certaines covariables dans lesquelles la SMD est plutôt augmentée par l'ajustement à l'aide de scores de propension tels que la présence ou l'absence d'enfants (child_dummy).

Comment sélectionner des covariables

La raison pour laquelle la distribution des covariables n'est pas homogène comme décrit ci-dessus est que les covariables qui devraient être utilisées pour estimer le score de propension ne sont pas incorporées, et un biais caché demeure. Afin d'éliminer le biais caché, il est nécessaire de satisfaire la condition "d'attribution fortement négligeable", mais comme il est impossible de vérifier directement si cette condition est satisfaite, la condition est indirectement satisfaite. Il semble que vous vérifiez et sélectionnez souvent une covariable. (L'explication de la condition "allocation fortement négligeable" sera laissée aux livres spécialisés.)

La politique de base pour la sélection des covariables est d'inclure autant de covariables que possible qui sont liées aux variables de résultat et de groupe. La procédure de sélection est

  1. Extraire les variables liées aux variables de résultat --Exemple: effectuer une analyse de régression avec le nombre de résultats comme variable objective et l'un des candidats de la covariable comme variable explicative, et extraire celui avec le coefficient de pseudo-détermination le plus élevé.
  2. Extraire les variables liées aux variables de groupe --Exemple: effectuez une analyse de régression en utilisant la variable de groupe comme variable objective et l'un des candidats de la covariable comme variable explicative, et extrayez celle avec le coefficient de pseudo-détermination le plus élevé.
  3. Fusionnez l'ensemble des covariables extraites en 1. et 2.
  1. Confirmation du pouvoir explicatif de l'allocation par covariable --Construire un modèle d'estimation du score de propension avec les covariables sélectionnées jusqu'à 3. et vérifier l'exactitude de l'estimation (AUC, etc.)
  2. Confirmation de la distribution des covariables

est. On dit que l'analyse de régression est effectuée dans les exemples de 1 et 2, mais comme le but ici est d'extraire des variables liées aux variables de résultat et aux variables de groupe, si cet objectif est atteint, ce ne sera pas nécessairement une régression. Aucune analyse n'est requise. En 4, nous vérifions la précision de l'estimation du modèle d'estimation du score de propension, mais veuillez noter qu'il ne s'agit pas d'une question de haute précision. En effet, il est nécessaire de sélectionner une covariable qui est plus étroitement liée à la variable de résultat qu'à la variable de groupe afin de maintenir la variance estimée de l'effet causal sur la variable de résultat à un faible niveau. Par conséquent, je pense que la méthode de sélection des variables qui améliore la précision de l'estimation du score de propension en utilisant un algorithme d'apprentissage automatique avec une bonne précision est différente en tant que politique.

en conclusion

Le raisonnement causal statistique, en particulier la méthode d'estimation de l'effet des mesures par la méthode de pondération de probabilité inverse basée sur le score de propension, est résumé avec le code Python. Il a également abordé la manière de sélectionner les covariables. Cependant, il est difficile de juger si l'effet peut être estimé correctement, alors soyez prudent lorsque vous utilisez le raisonnement causal statistique! Je dois dire.

Nous vous serions reconnaissants de bien vouloir signaler toute description incorrecte.

référence

Recommended Posts

Estimation de l'effet des mesures à l'aide des scores de propension
[Baies non paramétriques] Estimation du nombre de clusters à l'aide du processus Diricle
Étudiez l'effet des valeurs aberrantes sur la corrélation
Raccourcir le temps d'analyse d'Openpose à l'aide du son
Vérifiez le type de variable que vous utilisez
Sortie exclusive de l'application Django utilisant ngrok
Essayez d'utiliser le module de collections (ChainMap) de python3
Prise en compte du score de propension et de la précision de l'estimation des effets
Déterminez le nombre de classes à l'aide de la formule Starges
J'ai essayé d'utiliser le filtre d'image d'OpenCV
Vérifiez l'état des données à l'aide de pandas_profiling
Gratter les données gagnantes de Numbers à l'aide de Docker
Calcul de l'itinéraire le plus court selon la méthode de Monte Carlo
Explication du concept d'analyse de régression à l'aide de python Partie 2
Découpez une partie de la chaîne à l'aide d'une tranche Python
Dessinez sur Jupyter en utilisant la fonction de tracé des pandas
La douleur de gRPC en utilisant Python. Novembre 2019. (Mémo personnel)
Explication du concept d'analyse de régression à l'aide de Python Partie 1
J'ai essayé d'utiliser l'API de Sakenowa Data Project
Analysons les émotions de Tweet en utilisant Chainer (2ème)
Explication du concept d'analyse de régression à l'aide de Python Extra 1
Étude de Python Hour8: Utilisation de packages
Analysons les émotions de Tweet en utilisant Chainer (1er)
L'histoire de l'utilisation de Circleci pour construire des roues Manylinux