【Python】2グループの差を科学的に証明する!SciPyで実装するt検定の基本と実務コード | 会社員×塾講師|教育・自己啓発・IT。学びのポイントを凝縮して発信中!

会社員×塾講師|教育・自己啓発・IT。学びのポイントを凝縮して発信中!

会社員×塾講師=最強の情報提供者として、公式HPやnoteで発信中の教育・自己啓発・ITに関する学びを要約してシェア!忙しい方向けにポイントを凝縮してお届けします。日々の成長の記録が誰かのためになりますように。

「新しいWebデザインに変更して、

 本当にユーザーの滞在時間は伸びたのか?」

「実施した研修プログラムは、

 メンバーのスキルアップに効果があったのか?」

 

 

データ分析の現場で、このような

 

「2つのグループの平均値に、本当に意味のある差があるのか」

 

を客観的に判断したい場面は少なくありません。

 

 

人間の感覚だけで判断しようとすると、

一部の極端なデータに惑わされて見当違いの

結論を出してしまうリスクがあります。

そこで活躍する統計手法が「t検定(t-test)」です。

 

 

数学的な背景をすべて暗記する必要はありません。

大切なのは、

 

「データの性質に合わせて正しい関数を選び、 

 実際に出力された数値を実務の判断に活かすこと

 (Learn by doing)」です。

 

 

今回は、Pythonを使ってt検定を実装する方法を、

アメブロでもバッチリ読めるテキスト形式で

スッキリと解説します!

 

📊 統計分析におけるt検定とは?

t検定とは、主に

 

「2つの母集団の平均値に有意な差

 (偶然のブレとは言えない明確な差)があるかどうか」

 

を判定する統計学的な手法です。

 

📐 t検定の数理的なイメージ

t検定では、データをもとに「t値」と呼ばれる

統計量を計算します。

 

 

難しそうな計算の裏側で行われているのは、

実はとてもシンプルな引き算と割り算です。

 

  • t値 =(グループ1の平均 - グループ2の平均)÷(データのばらつき)

 

厳密には、分母の「データのばらつき」には、

それぞれのグループの不偏分散やサンプルサイズ

(データ数)から計算される標準誤差という数値が使われます。

 

 

この仕組みが意味しているのは、

「グループ間の平均の差」を「データのばらつき」で

割っているということです。

 

データの散らばりが小さく、

平均の差が大きいほどt値は大きくなり、

「明確な差がある」と判定されやすくなります。

 

💡 実務で使う主なt検定の種類

  • 対応のないt検定(独立標本のt検定) 異なる2つのグループを比較する場合に使います(例:AチームとBチームのテスト点数の比較、広告Aと広告Bのクリック率の比較)。
     

  • 対応のあるt検定(対応補本のt検定) 同じグループの前後比較を行う場合に使います(例:同じ参加者のプログラム受講前と受講後の体重比較)。
     

👨‍💻 Pythonによるt検定の実装ステップ

Pythonで統計分析を行う場合は、

科学技術計算ライブラリである

「SciPy(サイパイ)」を利用するのが最も効率的です。

 

💻 ケース1:広告のA/Bテスト(対応のないt検定)

2つの異なるグループで滞在時間に差があるかを検証します。

実務では2つのグループの分散(データの広がり方)が

等しいとは限らないため、等分散を仮定しない

「ウェルチのt検定(equal_var=False)」を使うのが安全です。

 

 

Python

ーーーーーー

import numpy as np
from scipy import stats

# サンプルデータの生成(滞在時間:秒)
np.random.seed(42)
group_a = np.random.normal(loc=120, scale=20, size=50) # 平均120秒
group_b = np.random.normal(loc=135, scale=25, size=50) # 平均135秒

# ウェルチのt検定を実行
t_stat, p_value = stats.ttest_ind(group_a, group_b, equal_var=False)

print(f"t値: {t_stat:.3f}")
print(f"p値: {p_value:.4f}")

ーーーーーー

 

判定のポイント:p値(p-value)の見方 出力された「p値」が一般的に 0.05(5%)を下回っている場合、「統計的に有意な差がある(偶然のブレではない)」と判断します。

 

💻 ケース2:プログラムの効果測定(対応のあるt検定)

同じ参加者10名の、

ダイエットプログラム開始前と1ヶ月後の体重を比較します。

個人の元の体重の影響(個体差)を排除して

純粋な効果を測るため、ttest_rel を使用します。

 

 

Python

ーーーーーー

# サンプルデータの生成(体重:kg)
weight_before = np.array([75, 80, 68, 92, 85, 78, 88, 70, 77, 95])
weight_after = weight_before - np.random.normal(loc=2, scale=1, size=10) # 平均2kg減

# 対応のあるt検定を実行
t_stat, p_value = stats.ttest_rel(weight_before, weight_after)

print(f"t値: {t_stat:.3f}")
print(f"p値: {p_value:.4f}")

ーーーーーー

 

 

⚠️ 分析を台無しにする「3つの落とし穴」

  • 外れ値の放置 t検定は平均値をベースに計算するため、極端に大きな(または小さな)値が1つ混ざっているだけで結果が激しく歪みます。事前に箱ひげ図などでデータを確認し、異常値は除外する前処理を徹底しましょう。
     

  • データ数が少なすぎる 各グループのサンプルサイズが少なすぎる(目安として30未満)と、データの分布が正規分布(釣鐘型の分布)から外れた際に正しい検定ができなくなります。
     

  • p値ハッキング(有意差の捏造) 「p値が0.05未満になるまで、都合の悪いデータを削る」といった行為は不適切です。分析の目的と仮説は、必ずデータを集める前に設定してください。
     

📋 【コピペ用】実務でそのまま使えるウェルチのt検定関数

お手元のデータフレームから2つの列を渡すだけで、

自動で平均値の比較と判定までを行うテンプレートコードです。

 

 

Python

ーーーーーー

import pandas as pd
from scipy import stats

def perform_ab_test(data_group_1, data_group_2, alpha=0.05):
    """
    2つのグループ間でウェルチのt検定を行い、結果を判定する関数
    """
    t_stat, p_val = stats.ttest_ind(data_group_1, data_group_2, equal_var=False)
    
    print("--- t検定結果 ---")
    print(f"グループ1 平均: {data_group_1.mean():.2f}")
    print(f"グループ2 平均: {data_group_2.mean():.2f}")
    print(f"t値: {t_stat:.3f}, p値: {p_val:.4f}")
    
    if p_val < alpha:
        print(f"結論: 有意水準 {alpha} で、2つのグループには統計的に有意な差があります。")
    else:
        print(f"結論: 有意水準 {alpha} で、2つのグループに有意な差があるとは言えません。")

# 【使用例】データフレームの列を割り当てて実行
# perform_ab_test(df['A_score'], df['B_score'])

ーーーーーー
 

🏁 まとめ:完璧な数式理解より、正しいツール選び

SciPyを使えば、複雑な統計数式をガリガリ解かなくても、

わずか数行のコードで科学的なデータ分析が

実行できる時代です。

 

 

だからこそ重要なのは、コードを丸暗記することではなく、

 

「このデータは対応があるか・ないか」

「外れ値の処理は終わっているか」

 

を正しく見極めるリテラシーです。

 

 

まずは手元の簡単なデータや、

サンプルコードの数値を少し変えて動かしてみる

「Learn by doing」の精神で、勘に頼らない論理的な

意思決定の仕組みを構築していきましょう!

 

🏠 公式HPで「数字が苦手なノンエンジニア向け!コピペで自動判定まで完了する『Python統計分析コード集』&実務直結プロンプトテンプレート」を無料公開中!

脳のメモリを無駄遣いせず、

タイパ最強のルートでデータサイエンスを業務に組み込む

具体的なノウハウは、ぜひ公式HPのブログ記事を

ご覧ください。

 

 

「Pythonで統計分析!t検定の基礎から実装手順まで徹底解説」 

https://info-study.com/python-statistics-t-test-analysis/