基礎統計(20)再サンプリング2(シーケンス検定)


統計学では,再サンプリングはランダム変動性を理解するためである.これは観測されたデータの繰り返し抽出を意味し,これはいくつかの機械的学習(ML)モデルの精度の評価と向上に利用できる汎用的な目標である.(決定ツリー、タグ)

📈 さいサンプリング

  • 再サンプリングには、ガイドバーとシーケンス検定の2つの主要なタイプがあります.基礎統計(10)では,スタートバーと簡単な順序検定も議論した.ガイドバーについては,推定された信頼性(信頼区間)を評価するために用いられ,今回はシーケンス検証について詳細に議論する.
  • シーケンス検定は、通常、2つ以上のグループに関連する仮定を検証するために使用される.
  • 📈 クリーンアップ用語

  • シーケンス検定(permutation test):2つ以上の標本を結合し、観測値をランダム(またはすべて)に再サンプリングする過程.
  • 再サンプリング:観測データからサンプリング過程
  • を繰り返す

    📈 シーケンス検定

  • の並べ替えプロセスには、2つ以上の標本が含まれ、これらは通常、A/B検定または他の仮定検定のためのグループである.
  • シーケンス検定の第1のステップは、AとB(またはC,D...の複数の可能性)の結果を統合することである.
  • がこのようにする理由は、貴無仮定の論理、すなわち、グループに適用される処理結果に違いがないことを具体化している.
  • は、次いで、組合せの集合からランダムに1つのグループを抽出して、仮定がどれほど異なるかを検証する.
  • シーケンス検定は、データの非正規分布時に使用することができ、2つの変数の平均差比較、例えば30以上のサンプルまたは正規分布時t検定、そうでなければシーケンス検定を使用することができる非指数的な方法である.
  • <シーケンスチェック順>
  • の複数の結果を単一のデータセットに集計します.
  • と結合したデータを混合した後、A群と同じ大きさの標本をランダム(非還元)に抽出した.
  • の残りのデータからBグループと同じサイズのサンプルをランダム(非還元)に抽出した.
  • C、Dなどの他のグループがあれば、このグループも同様の方法を用いる.
  • 元本(集団比率の差)については,求めた統計量や推定値が何であるかにかかわらず,新たに抽出した再サンプリングを再計算し記録する.これで並べ替えが行われました.
  • の前のステップをR回繰り返し、検査統計量のシーケンス分布を得た.
  • 最初の組み合わせの違いを比較することができます.
  • で観察された差異が順番に表示される差異の集合では、何も証明できない.すなわち,偶然発生する範囲内にあるため,帰無仮定が正しい確率が高い.
  • 観測された相違がほとんどの配列分布の外側にある場合,これは偶然ではないと考えられる.つまり、この違いは統計的に意味がある.

    📈 例

  • 人の注目を集めるウェブデザインがより多くの売上高を創出できると考えるのは合理的だ.したがって、測定指標は、ページAとページBとの平均セッション時間を比較するものとすることができる.
  • の2つの異なる設計に対して、36個のセグメント、Aページ21個、Bページ15個を記録した.BOXPLOTによる
  • の比較
    # 데이터 불러오기
    session_times = pd.read_csv('/content/web_page_data.csv')
    session_times
  • 上図はデータの一部です.
  • # visualization
    ax = session_times.boxplot(by = 'Page', column = 'Time')
    ax.set_xlabel('')
    ax.set_ylabel('Time (in seconds)')
    plt.suptitle('') # 모든 서브플롯에 메인타이틀을 부여한다.

    上のboxblotから分かるように、ページBはより多くの訪問者を引きつけている.
  • 各グループの平均数は
  • である.
    mean_a = session_times[session_times.Page =='Page A'].Time.mean()
    mean_b = session_times[session_times.Page =='Page B'].Time.mean()
    
    print(f'mean_a : {mean_a}')
    print(f'mean_b : {mean_b}')
    print(f'mean_b - mean_a: {mean_b - mean_a}')
    >>>
    mean_a : 126.33333333333333
    mean_b : 162.0
    mean_b - mean_a: 35.66666666666667
  • ページBは、ページAより平均35.67秒長いセッション時間を有する.
  • ですが、私たちが確認したいのは、現在現れているこのような違いが偶然に起こったのではないかということです.
  • シーケンス検査により、全セッション時間を組み合わせて均一に混合した後、21個のグループ(Aページは21)と15個のグループ(Bページは15)を繰り返して標本を抽出した.
  • シーケンス検定を適用するには、36セッション時間を21および15のグループにランダムに割り当てる必要がある.
  • # 순열검정을 구현하는 함수
    import random
    
    def perm_fun(x, nA, nB):
      n = nA + nB # 두개의 데이터를 단일로 합쳐준다.
      idx_B = set(random.sample(range(n),nB)) # 1. 비복원 추출 방식으로 nB개의 표본을 추출하여 그룹 B에 할당
      idx_A = set(range(n)) - idx_B # 2. 나머지 nA개는 그룹 A에 할당
      return x.loc[idx_B].mean() - x.loc[idx_A].mean() # 두 그룹 간 평균 차이 계산
    
    # 페이지 A, B의 갯수 저장
    nA = session_times[session_times.Page == 'Page A'].shape[0] 
    nB = session_times[session_times.Page == 'Page B'].shape[0]
  • perm fun関数は、nB個のサンプルを非還元抽出で抽出し、グループBに割り当てる.
  • 残りのnA個はAグループに割り当てられる.
  • では、結果として2つの平均値の差が返されます.
  • # 함수를 1000번 호출하여 히스토그램 시각화
    
    random.seed(1)
    perm_diffs = [perm_fun(session_times.Time, nA, nB) for _ in range(1000)]
    
    fig, ax = plt.subplots(figsize=(5, 5))
    ax.hist(perm_diffs, bins=11, rwidth=0.9)
    ax.axvline(x = mean_b - mean_a, color='black', lw=2)
    ax.text(50, 190, 'Observed\ndifference', bbox={'facecolor':'white'})
    ax.set_xlabel('Session time differences (in seconds)')
    ax.set_ylabel('Frequency')
    
    plt.tight_layout()
    plt.show()
    import numpy as np
    print(np.mean(perm_diffs > mean_b - mean_a))
    >>> 0.121 
  • ページAとページBの間のセッション時間差は確率分布の範囲内であり、12.1%の確率差がある可能性がある.したがって,統計的に差異には気づかなかった.
  • 📈 ソート検証:データ科学の最終結論

  • シーケンス検定は、ランダム変異の役割を理解するために使用される簡便なプログラムである.
  • は比較的容易に符号化、解釈および解釈される.また,正確性を保証できない公式に基づく統計学に漏れやすい形式主義と「虚偽決定論」の有用な迂回を提供した.
  • 📈 主な概念

  • 配列検定において、複数の標本を結合し、次いで均一に攪拌した.
  • は、次いで、混合値を用いて再サンプリングプロセスを経て、関心のあるサンプル統計量を算出する.
  • は、反復プロセス再サンプリングの統計をグラフ化する.
  • で観測された統計量を再サンプリングの分布と比較して,試料間で観察された相違が偶然であるか否かを判断できた.