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.
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
Outils en ligne https://www.gigacalculator.com/calculators/chi-square-calculator.php?test=goodnessoffit&data=15752+0.5%0D%0A15257+0.5
Quelques tests https://toukei.link/programmingandsoftware/statistics_by_python/chisqtest_by_python/
Recommended Posts