mcpField
S
stats-methods

stats-methods

github.com/okou-aiデータ・データベース8155 回インストール1 週間前に更新
リポジトリ

stats-methods について

データ分析向けの統計手法スキルです。数値の要約、トレンド分析、外れ値への対処、仮説検定を扱い、簡易予測と分析上の注意点もまとめています。

主な機能

  1. 01代表値とばらつき指標の選択
  2. 02パーセンタイルによる分布の記述
  3. 03期間比較とトレンド分析
  4. 04外れ値の特定と処理
  5. 05仮説検定の選択
  6. 06統計分析の落とし穴の回避

活用シーン

  1. 01ビジネス指標の分布を要約
  2. 02A/B テストやユーザー群を比較
  3. 03時系列の異常と季節性を確認
  4. 04短期指標の予測範囲を算出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/okou-ai/okou-skills --skill stats-methods

インストール後、Claude Code で/stats-methodsを入力して読み込まれたか確認します。

詳細

数値データの要約

中心を表す指標の選択
データの特性推奨される指標理由
対称的で、外れ値がない平均値最も効率的な推定量です
非対称、または外れ値が多い中央値極端な値の影響を受けません
数値ではない、または順位付けされたデータ最頻値カテゴリーデータで唯一使える指標です
ユーザーあたりの収益などのビジネス KPI平均値と中央値の両方両者の差から歪みがわかります

指針: ビジネス指標を示す際は、平均値とともに中央値も提示してください。両者に大きな差がある場合、分布が歪んでいるため、平均値だけでは誤解を招きます。

ばらつきの定量化
  • 標準偏差:平均値からの典型的な距離です。釣鐘型のデータに最適です。
  • IQR(四分位範囲):25 パーセンタイルと 75 パーセンタイルの差です。極端な値の影響を受けにくい指標です。
  • 変動係数:標準偏差を平均値で割った値です。異なる尺度間で、ばらつきを同じ基準で比較できます。
  • 範囲:最大値から最小値を引いた値です。データの広がりをすばやく把握できますが、外れ値の影響を受けやすい指標です。
パーセンタイルでデータの傾向を伝える

平均値にとどまらず、パーセンタイルの段階的な値を報告してください。

p1:   Floor of the distribution (bottom 1%)
p5:   Lower boundary of typical values
p25:  First quartile
p50:  Median — the representative observation
p75:  Third quartile
p90:  Top 10% threshold (heavy users, premium tier)
p95:  Upper boundary of typical values
p99:  Extreme top 1%

分析例:「すべてのセッションの半数は 4.2 分未満ですが、上位 10%は 22 分を超えており、その結果、平均は 7.8 分になっています。」

分布の特徴づけ

数値列ごとに、以下を記録してください。

  • 形状:ガウス型、右裾が長い、左裾が長い、二峰性、一様、裾が重い
  • 中心:平均値と中央値、および両者の差の大きさ
  • 広がり:適切に標準偏差または IQR を使用
  • 極端な値:外れ値の数と程度
  • 境界:ゼロを下限とする場合や 100%を上限とする場合など、自然な上限・下限

トレンド分析と予測

ノイズの多い時系列の平滑化
# Weekly smoother — useful for daily data with weekday/weekend cycles
df['smooth_7'] = df['metric'].rolling(window=7, min_periods=1).mean()

# Four-week smoother — irons out both weekly and monthly rhythms
df['smooth_28'] = df['metric'].rolling(window=28, min_periods=1).mean()
期間比較
  • 前週比:1 週間隔で同じ曜日を比較します
  • 前月比:暦月とその直前の暦月を比較します
  • 前年同期比:季節性のあるビジネスで最も信頼できる比較基準です
  • 同一暦日比:前年の同じ日付と比較します
成長の測定
Simple rate:   (current - prior) / prior
CAGR:          (final / initial) ^ (1 / n_years) - 1
Log rate:      ln(current / prior)   # more stable for volatile series
季節サイクルの特定
  1. まず生の時系列を目視で確認します
  2. 曜日ごとに集計し、週次のリズムを明らかにします
  3. 暦月ごとに集計し、年次のリズムを明らかにします
  4. トレンドと季節性を切り分けるには、必ず前年同期比または同一期間の比較を使用します
手軽な予測手法

本格的なモデリングではなく、すばやい予測が必要な分析担当者向けの手法です。

  • ナイーブ予測:直近の観測値を予測値とします。最低限のベースラインとして機能します。
  • 季節ナイーブ予測:前の季節サイクルにおける同じ期間の値を予測値とします。
  • 線形外挿:直近の履歴に直線を当てはめます。トレンドが明らかに線形の場合にのみ適しています。
  • 移動平均:移動平均を予測値として使用します。

予測は点推定ではなく、必ず範囲で示してください。

  • 良い例:「直近四半期の実績に基づくと、来月の登録数は 10,000~12,000 件になる見込みです」
  • 誤解を招く例:「来月の登録数は正確に 11,234 件になります」

パターンが非線形の場合、複数の季節サイクルが重なっている場合、広告費や祝日などの外部要因が重要な場合、または予測精度がリソース配分の判断に影響する場合は、専門家に引き継いでください。

外れ値の検出と処理

特定手法

Z スコア法(おおむね正規分布であることを前提とします):

z = (df['val'] - df['val'].mean()) / df['val'].std()
outliers = df[abs(z) > 3]  # beyond 3 standard deviations

IQR フェンス法(分布の形状を問いません):

q1 = df['val'].quantile(0.25)
q3 = df['val'].quantile(0.75)
iqr = q3 - q1
lo = q1 - 1.5 * iqr
hi = q3 + 1.5 * iqr
outliers = df[(df['val'] < lo) | (df['val'] > hi)]

パーセンタイルカットオフ法(最も簡単な方法です):

outliers = df[(df['val'] < df['val'].quantile(0.01)) |
              (df['val'] > df['val'].quantile(0.99))]
外れ値への対処

外れ値を自動的に除外してはいけません。次の手順に従って判断します。

  1. 診断する:記録ミスか、正当に極端な観測値か、別の母集団の存在を示すものかを確認します。
  2. 誤りの場合:修正するか除外します(例:負の年齢、エポックゼロのタイムスタンプ)。
  3. 正当な極端値の場合:保持しつつ、ロバストな要約統計量(中央値、IQR)に切り替えます。
  4. 異なる母集団の場合:別々に分析します(例:エンタープライズアカウントとセルフサービス)。

除外した記録はすべて記録します:「注文額が$50Kを超える47件の記録(データセットの0.3%)を除外しました。これらの大口エンタープライズ取引については、別のセクションで扱います。」

時系列の異常検知
  1. 期待されるベースライン(移動平均または前年同期の値)を設定します。
  2. 残差を計算します:実績値から期待値を差し引きます。
  3. 過去の残差の標準偏差の2~3倍を超える残差にフラグを付けます。
  4. 一時的な急増(一点異常)と継続的な変化(変化点)を区別します。

仮説検定の基本

適用する場面

ランダムノイズと実際のシグナルを区別する必要がある場合は、必ず正式な検定を使用します。

  • A/Bテストの結果を評価する
  • 製品変更の影響を測定する(変更前と変更後)
  • 顧客セグメント間で指標を比較する
手順
  1. 帰無仮説(H0)を設定する:差は存在しない(デフォルトの立場)
  2. 対立仮説(H1)を設定する:差が存在する
  3. 有意水準(alpha)を設定する:標準は0.05(偽陽性の許容率5%)
  4. 検定統計量とp値を計算する
  5. 判断する:p < alphaの場合、H0を棄却するのに十分な証拠があります。
適切な検定の選び方
問い適切な検定条件
2群の平均に差があるか?独立サンプルのt検定おおむね正規分布、2群
2つのコンバージョン率に差があるか?比率のz検定二値の結果
同じ対象を2回測定しているか?対応のあるt検定同一対象の前後比較
3群以上の平均を比較するか?ANOVA複数のバリエーションまたはセグメント
正規分布ではないデータで、2群を比較するか?Mann-Whitney U検定偏りのある指標または順序尺度の指標
2つのカテゴリ変数に関連があるか?カイ二乗検定度数表データ
p値を超えて:実質的な影響

統計的に有意な結果は、効果が偶然による可能性が低いことだけを意味します。実務上重要な効果であることを保証するものではありません。検定結果には必ず次の情報を添えてください。

  • 効果の大きさ:「バリエーションBによりコンバージョン率が0.3パーセントポイント向上しました」
  • 信頼区間:真の効果として妥当と考えられる範囲
  • ビジネス上の解釈:収益、ユーザー、または効率への影響
サンプルサイズへの留意
  • サンプルが小さいと、p値が良好に見えても結論の信頼性は低くなります。
  • 比率のベースラインの信頼性を確保するには、各群でおよそ30件以上のイベントが必要です。
  • 微妙な効果(例:コンバージョン率の1ポイントの変化)を検出するには、各群に数千件の観測値が必要になることがあります。
  • データが限られている場合は、その旨を明記します:「各群200件の観測値では、X%未満の効果は検出できない可能性が高いです」

統計上の落とし穴を避ける

相関と因果関係

相関が見つかった場合は、必ず次の可能性を明示的に検討します。

  • 逆方向の因果関係:AがBを促すのではなく、BがAを促している可能性があります。
  • 隠れた第三の要因:測定されていない変数Cが両方の背後にある可能性があります。
  • 偶然:変数のペアを十分な数だけ調べれば、見せかけの関連が見つかることがあります。

安全な表現:「機能Xを利用するユーザーは、継続率が30%高い傾向にあります」 安全でない表現:「機能Xによって継続率が30%高くなります」(実験的な証拠が必要です)

多重検定の落とし穴

多くの検定を実行すると、偽陽性が増加します。

  • alpha = 0.05で20個の指標を検定すると、偶然によりおよそ1件の見せかけの有意差が生じます。
  • 「興味深い」セグメントを見つけるまでに多数のセグメントを調べた場合は、そのことを明記します。
  • ボンフェローニ補正(alpha / 検定数)を適用するか、実施した検定の総数を明示します。
シンプソンのパラドックス

データをサブグループに分けると、全体の傾向が逆転することがあります。

  • 集計した結論が、主要な各セグメントでも成り立つことを確認します
  • よくある例:自然にコンバージョン率が高いセグメントにトラフィックが移ったため、各セグメントのコンバージョン率は低下しているのに、全体のコンバージョン率は上昇します
生存者バイアス

データセットに含まれるのは、記録されるまで存続した対象だけです。

  • 現在のユーザーだけを調べると、すでに離脱したユーザーが見落とされます
  • 成功した製品だけを分析すると、失敗した製品が見落とされます
  • 定期的に次のように問いかけます。「このデータに含まれていないのは誰で、その人たちを含めると結論は変わるでしょうか?」
生態学的誤謬

集団レベルの傾向が個人にも当てはまるとは限りません。

  • 「Xが高い国ほどYも高い」からといって、個人レベルでも同じことが当てはまるわけではありません
  • 集計統計を個人レベルの予測に当てはめるのは避けましょう
見せかけの精密さ

過度に細かな数値は、根拠のない確信を示唆します。

  • 「来四半期の解約率は4.73%になります」という表現は、実際にはほとんど得られない精度を暗示します
  • 「解約率は4%から6%の間になる可能性が高い」のように、誠実な範囲で示しましょう
  • 実際に把握している確実性の水準に合わせて、数値を丸めましょう

コメント