データクリーニングと探索的分析

Pythonで学ぶA/Bテスト

Moe Lotfy, PhD

Principal Data Science Manager

欠損値のクリーニング

  • 欠損値
    • 削除・無視・代入
# 平均注文額を計算
checkout.order_value.mean()
30.0096
# 欠損を0で置換して平均を取得
checkout['order_value'].fillna(0).mean()
25.3581
Pythonで学ぶA/Bテスト

重複のクリーニング

  • 重複
    • 同一行は削除すべき
# ログ不具合による重複行を確認
print(len(checkout))
print(len(checkout.drop_duplicates(keep='first')))
9000
9000
Pythonで学ぶA/Bテスト

重複のクリーニング

  • 重複
    • 重複ユーザーは慎重に扱う
# グループBのユニークユーザー数
print(checkout[checkout['checkout_page'] == 'B']['user_id'].nunique())
# 少なくとも1回購入したユニークユーザー数
print(checkout[checkout['checkout_page'] == 'B'].groupby('user_id')['purchased'].max().sum())
# グループBの購入イベント総数
print(checkout[checkout['checkout_page'] == 'B']['purchased'].sum())
2938
2491.0
2541.0
Pythonで学ぶA/Bテスト

EDAの要約統計

  • 平均・件数・標準偏差のサマリー
checkout.groupby('checkout_page')['order_value'].agg({'mean','std','count'})
                    mean     count    std
checkout_page            
        A        24.956437    2461    2.418837
        B        29.876202    2541    7.277644
        C        34.917589    2603    4.869816
Pythonで学ぶA/Bテスト

EDAの可視化

  • 棒グラフ
sns.barplot(x=checkout['checkout_page'], y=checkout['order_value'], estimator=np.mean)
plt.title('各チェックアウトページの平均注文額')
plt.xlabel('チェックアウトページのバリアント')
plt.ylabel('注文額 [$]')

チェックアウトページ別の平均注文額の棒グラフ

Pythonで学ぶA/Bテスト

EDAの可視化

  • ヒストグラム
sns.displot(data=checkout, x='order_value', hue = 'checkout_page', kde=True)

注文額のヒストグラム

Pythonで学ぶA/Bテスト

EDAの可視化

  • 時系列(折れ線)
sns.lineplot(data=AdSmart,x='date', y='yes', hue='experiment', errorbar=None)

広告に「はい」と回答したユーザー比率の時系列プロット

1 Adsmart Kaggle データセット: https://www.kaggle.com/datasets/osuolaleemmanuel/ad-ab-testing
Pythonで学ぶA/Bテスト

練習しましょう!

Pythonで学ぶA/Bテスト

Preparing Video For Download...