[PYTHON] Méthode d'essai pour la différence de taille entre les groupes

http://gingi99.hatenablog.com/entry/2019/08/09/212415

J'ai vu. Cet article a fourni une explication facile à comprendre des détails de l'inadéquation du ratio d'échantillonnage.

La non-concordance du taux d'échantillonnage ressemble à ceci:

Lorsque j'ai enquêté sur les raisons de cette situation, c'était parce que le nombre d'utilisateurs de traitement affectés au test A / B était significativement inférieur au nombre d'utilisateurs de contrôle après le début de l'expérience. Après avoir identifié la cause de cela (la raison viendra plus tard) et l'avoir correctement vérifiée, nous avons pu détecter la différence positive attendue. C'est exactement ce que nous appelons le Sample Ratio Mismatch (SRM). En d'autres termes, les deux populations de contrôle / traitement affectées au test A / B n'ont pas collecté les tailles d'échantillon dans les proportions attendues, ce qui a conduit à des résultats erronés.

Je voudrais tester "si les tailles d'échantillon ont été collectées dans le rapport attendu dans les deux populations témoins / traitées".

Cet article explique comment tester que le groupe de test A / B A et le groupe B sont 1: 1. La méthode d'essai est le ** "Test de conformité" **.

https://bellcurve.jp/statistics/course/9494.html

Le test peut être fait en utilisant scipy.stats.chisquare dans la bibliothèque scipy de Python. ça peut.

J'essaye de faire un test A / B comme exemple En supposant que le groupe A compte 10 000 utilisateurs et le groupe B 9 900 utilisateurs, vérifiez qu'il s'agit du rapport attendu de 1: 1.

import scipy
a_num = 10000
b_num = 9900
expect = (a_num + b_num)/2
observed_values=scipy.array([a_num, b_num])
expected_values=scipy.array([expect, expect])
scipy.stats.chisquare(observed_values, f_exp=expected_values)

Cela vous donnera le résultat Power_divergenceResult (statistic = 0.50525125628140703, pvalue = 0.4783981994489356).

La statistique est "0,503" et la valeur p est "0,47". Si le niveau de signification est de 5%, il ne peut pas être rejeté, on peut donc voir qu'il n'y a pas de différence entre les échantillons des groupes A et B.

Essayez d'utiliser des données qui semblent faire une différence.

a_num = 10000
b_num = 9000
expect = (a_num + b_num)/2
observed_values=scipy.array([a_num, b_num])
expected_values=scipy.array([expect, expect])
scipy.stats.chisquare(observed_values, f_exp=expected_values)

Cela devient Power_divergenceResult (statistique = 52,63157894736842, pvalue = 4,023672190684225e-13), la valeur p est inférieure à 0,05, et on peut dire qu'il y a une "différence", c'est-à-dire que SRM se produit.

Lorsque vous utilisez JavaScript

Utilisez jstat, qui est une bibliothèque de statistiques JS.

Il est nécessaire de calculer le chi carré et de se référer à la table de distribution.

const jStat = require('jstat');

const a = 10000
const b = 9000
const expected = (a+b)/2

const statistics = (a - expected)**2 / expected + (b - expected)**2 / expected
// 52.63157894736842

const df = 1
const pValue = 1 - jStat.chisquare.cdf(chi_2, df)
// 4.0234482412415673e-13

référence

Outils en ligne https://www.gigacalculator.com/calculators/chi-square-calculator.php?test=goodnessoffit&data=15752+0.5%0D%0A15257+0.5

Diagnosing Sample Ratio Mismatch in Online Controlled Experiments: A Taxonomy and Rules of Thumb for Practitioners

Quelques tests https://toukei.link/programmingandsoftware/statistics_by_python/chisqtest_by_python/

Recommended Posts

Méthode d'essai pour la différence de taille entre les groupes
[Python] Différence entre fonction et méthode
[Python] Différence entre la méthode de classe et la méthode statique
Différence entre numpy.ndarray et list (dimension, taille)
Modélisation-estimation de Bayes de la différence entre les deux groupes-
Résumé de la méthode d'essai
Automatisation des tests pour le travail
Méthode de concaténation de liste en python, différence entre list.extend () et opérateur «+»