FURYU Tech Blog - フリュー株式会社

フリュー株式会社の開発者が技術情報を発信するブログです。

データ分析業務に統計学を取り入れる取り組み ②実践編

皆さまこんにちは。ピクトリンク事業部データ分析チームの堀江です🍁
前回記事に続いて、データ分析チームで統計学を取り入れる取り組みについて紹介します。
今回は、実際に学習した内容をピクトリンクのデータに当てはめた「②実践編」の記事です。
tech.furyu.jp
※本記事では仮説検定について取り上げていますが、詳細なやり方については説明していません

やったこと

チームメンバー4人全員で仮説検定を行いました。
ピクトリンクのデータの中から、チームメンバーそれぞれが一つのテーマを考え、帰無仮説・対立仮説の設定~帰無仮説の棄却までの一連の流れをPythonで行いました。

事前準備

仮説検定を行うのが初めてだったため、最初に仮説検定に必要な情報を以下のように各自で設定し、内容をチーム内でレビューしあいました。

検定テーマ(例)

■テーマ
ピクトリンクのある機能を使用したユーザーとそうでないユーザーとで、半年後のヘビー化率に有意な差があるか確かめる
■仮説
帰無仮説:ピクトリンクのある機能を使用したユーザーとヘビー化の関係は独立(関係がない)
対立仮説:ピクトリンクのある機能を使用したユーザーとヘビー化の関係は独立でない(関係がある)
■標本
A:2022年12月にピクトリンクのある機能を使用したユーザー
B:2022年12月にピクトリンクのある機能を使用していないユーザー
※前提条件
・中高生
・2022年12月にアプリへ来訪している
・2022年12月時点でヘビーユーザーでない
■手法
カイ二乗検定

チームレビューでは「標本の条件が不十分でないか」「最適な検定手法を選択しているか」などの基本的な部分を確認し合いました。
自分だけで内容を考えて進めていたら、バイアスの考慮が不十分で誤った結果になってしまいそうだったため、手を動かして作業を始める前に内容を詰める事が重要なのだな~と実感しました。

検定実行

レビュー後に内容の微調整をした後は、Pythonで検定を行いました。
データの下準備を除けば、検定自体は数行のコードでぱぱっとできます。
かがくのちからはすごいです。

#使用データ(例)
df = pd.crosstab(df['action_flg'], df['heavy_flg'])
#action_flg: 特定の行動をしているか
#heavy_flg:ヘビー化しているか

今回使用したデータは次のようなデータでした。

ヘビー化している ヘビー化していない
特定の行動をしている 230 1720 1950
特定の行動をしていない 130 2210 2340
360 3930 4290

(数値はサンプルです)

このデータに対してカイ二乗検定を行いました。

# カイ二乗検定
chi2, p, dof, exp = stats.chi2_contingency(df, correction=False)
print("期待度数", "\n", exp)
print("自由度", "\n", dof)
print("カイ二乗値", "\n", chi2)
print("p値", "\n", p)

上記コードの実行結果が次の通りです。

期待度数
[[ 163.63636364 1786.36363636]
[ 196.36363636 2143.63636364]]
自由度
1
カイ二乗値
53.86252473847896
p値
2.1502003102645302e-13

p値は0.00000000000021…のため、p<0.05より帰無仮説は棄却され、無事に仮説検定できた!

…としたかったのですが、ここで一つあることに気が付きました。
上に載せた集計表を割合にすると以下のようになります。

ヘビー化している ヘビー化していない
特定の行動をしている 13.3% 86.7% 100%
特定の行動をしていない 5.9% 94.1% 100%

ヘビー化している割合を「特定の行動をしている」ユーザーと「特定の行動をしていない」ユーザーで比較すると、その差は7.4ptあります。

結果の解釈はさておき、
仮説検定をわざわざやらなくても差がある事が分かるデータだったのでは…
と、ここで気が付きました。

検定実行後に再度チーム内でレビューを行ったところ、「バイアス除去がしきれていないのではないか」とアドバイスをもらいました。
言われた通りにその後も条件を調整しつつ検定を繰り返しましたが、どれに対しても有意な差が出ました。

今回は検出力云々よりも知識の定着化を目的としていたため、ある程度やった所で切り上げました。

検定をしてみて

今回は、学んだ知識を定着させるために「テーマを考えてから検定を行う」という流れでやりました。
しかし、本来は「〇〇と△△のデータを出した。〇〇の方が高い数値が出たが、これが統計的に有意な差があるかどうかを検定する」のように、比較したい数値をもとに考えるべきだったと気づきました。
今考えてみると当たり前な事ですが、「とりあえずやってみよう」の気持ちが先行しすぎていました。

一方で、「仮説検定の基本的な流れ」や「バイアス除去の重要性」を学べたため、結果はさておきいい経験になったと感じています。

さいごに

今後も今回のように実践を繰り返し、最終的にはチーム外へ結果を展開していきたいです。
最後まで読んでいただきありがとうございました🎑