仮説と必要証拠|課題設定・分析計画
このページはプロモーション(広告)を含みます。
課題設定・分析計画(初級・読む30分+演習35分)
この授業のゴール
- 1つの現象に対して複数の仮説を立て、それぞれが正しければ何が観測されるか(予測)を書ける
- どの仮説でも同じに見える証拠と、仮説どうしを区別できる証拠を見分けられる
- 仮説×証拠の表(証拠マトリクス)を作り、必要なデータと比較の相手を決められる
- 相関・前後関係・実験の違いを踏まえ、その証拠で言えないこと(断定できない因果)を書ける
仕事でどう使うか
「来店者数が減った」と分かったあと、次に必要なのはなぜ減ったかを見分ける証拠です。ここで「データを全部見てから考えよう」とすると、時間がかかるうえに、たまたま目立ったグラフに引きずられます。先に仮説を並べ、それぞれが正しければ何が見えるはずかを書いておくと、集めるべきデータが決まります。
| 路線 | この授業の使いどころ(成果物・意思決定) |
|---|---|
| DS(データサイエンティスト) | 分析計画書の「仮説と必要データ」の表を作り、集計の前に依頼者とレビューする |
| ML(機械学習エンジニア) | モデルの精度が落ちた原因(データの変化、実装の不具合、季節)を仮説として並べ、ログで切り分ける |
| DX(DX推進・AI企画) | 業務の遅れの原因候補(人手不足、手戻り、システム停止)を、現場で取れる記録と結び付ける |
| RS(研究者) | 対立仮説を明示し、どの観測で区別できるかを研究計画に書く(反証可能な形にする) |
この授業では、L01・L02の駅前店の事例を続けます。L02で決めた判断(来月チラシを配るか)に関わる仮説だけを扱い、証拠の集め方を設計します。
前提
次の考え方を使います。
- 現象・仮説・問いの違い → 問題と問い
- 判断表(結果ごとに取る行動の表)→ 利用者と意思決定
- 収集方法とバイアス(データの集め方で結果が偏ること)→ 収集方法とバイアス
- 平均の計算 → 平均・合計・中央値を手計算
本文では Python の pandas(表を扱うライブラリ)を使って、日別データを条件ごとに平均します。groupby(列の値ごとにグループに分ける操作)と mean(平均)だけを使います。コードを書けなくても、出力の表を読めば内容を理解できます。
身近な状況:仮説が3つ、データは山ほど
駅前店の来店者数は、先月の1日平均約37人から、今月後半は約25人に減っています。店長、スタッフ、エリア担当がそれぞれ別の説明をしています。
- 店長:「駅前で道路工事が始まって、歩道が狭くなったからだ」(仮説A:工事)
- スタッフ:「最近雨が多かったからでしょう」(仮説B:天気)
- エリア担当:「景気が悪くて、どの店もお客さんが減っている」(仮説C:地域全体の需要減)
どれもありそうな話です。ここで「来店者数が減っている」という事実をもう一度見せても、誰の説明が正しいかは決まりません。3つの仮説のどれでも「来店者が減る」と予測するからです。
区別するには、仮説によって予測が違う場面を探す必要があります。例えば:
- 工事が原因なら、工事の日だけ減り、工事のない隣の店舗は減らないはず
- 天気が原因なら、雨の日だけ減り、隣の店舗も同じように減るはず
- 地域全体の需要減なら、工事や天気に関係なく、隣の店舗も減っているはず
このように、「もし仮説が正しければ、この比較でこういう差が見えるはず」という形にすると、データの見るべき場所が決まります。
直感的な説明:容疑者を見分けるのは「全員に当てはまらない証拠」
推理小説で、「犯人は人間だ」という証拠は役に立ちません。容疑者全員が人間だからです。役に立つのは「犯人は左利き」のように、容疑者によって当てはまったり当てはまらなかったりする証拠です。
分析も同じです。
| 証拠の種類 | 例 | 仮説を区別できるか |
|---|---|---|
| どの仮説とも合う証拠 | 今月の来店者が先月より少ない | できない(A・B・Cすべてが予測する) |
| 区別できる証拠 | 工事のない公園前店は減っていない | できる(Aと合い、Cとは合わない) |
| 区別できる証拠 | 雨の日の数は先月と今月で同じ | できる(Bだけでは月の差を説明できない) |
もう1つ大事なのは、証拠は仮説を「支持する」ことはあっても「証明する」ことはまれだという点です。公園前店が減っていないことは工事仮説と合いますが、駅前店だけで起きた別の出来事(駅前店の近くに競合店が開いた、など)でも同じ結果になります。そこで、残った仮説の候補(対立仮説)を書いておき、「この証拠ではまだ区別できないもの」として報告します。
正確な定義:仮説・予測・証拠・証拠マトリクス
用語を定義します。
- 仮説(hypothesis):現象を説明する、検証可能な考え。「〜だから〜が起きた」の形で、何を見れば否定されるかが分かるものに限ります。「運が悪かった」は否定のしようがないので、分析の仮説として扱いにくいです。
- 予測(prediction):仮説が正しい場合に、特定の比較で観測されるはずのこと。「工事の日は工事のない日より来店者が少ない」など。
- 証拠(evidence):予測と照らし合わせる観測結果。比較の相手(何と比べたか)を必ず伴います。
- 区別力:その証拠が、仮説ごとに違う予測を持つ度合い。すべての仮説が同じ予測をする証拠は区別力がゼロです。
仮説を行、証拠を列にして、各仮説がその証拠で何を予測するかを書いた表を証拠マトリクスと呼びます(この教材での呼び方)。
| 仮説\証拠 | ①工事の日と工事のない日の差(雨なしの日で比較) | ②公園前店の前半と後半の差 | ③雨の日数の前半・後半比較 |
|---|---|---|---|
| A:工事 | 工事の日が少ない | 差なし | 関係なし |
| B:天気 | 差なし | 公園前店も雨の日に減る | 後半に雨の日が多いはず |
| C:地域の需要減 | 差なし(時期の差だけ) | 公園前店も後半に減る | 関係なし |
証拠の強さは、比較の作り方で変わります。
- 単純な前後比較:工事前と工事後を比べる。同じ時期に起きた別の変化(天気、季節)と区別しにくい。
- 比較群のある前後比較:工事のない店舗も同時に比べる。地域全体の変化を差し引ける。
- 実験:施策を一部にだけランダムに割り当てて比べる(例:チラシを配る地区をくじで決める)。原因の推定に最も強いが、工事のように自分で割り当てられない要因には使えない。
注意:相関(一緒に動くこと)は因果(一方が他方を引き起こすこと)ではありません。「雨の日は来店が少ない」は相関です。雨そのものが原因なのか、雨の日に偶然工事が重なっていたのかは、条件をそろえた比較で確かめます。
段階付き例題:14日間のデータで仮説を見分ける
入力:駅前店と公園前店の14日分の来店者数。前半7日は工事なし、後半7日は駅前だけで工事あり。雨の日は前半・後半とも2日ずつ。
ステップ1:条件をそろえて平均を出す。駅前店について、工事の有無×雨の有無の4グループで平均します。
import pandas as pd
# 架空の14日間(1行=1日)。works: 駅前の道路工事あり=1, rain: 雨=1
df = pd.DataFrame({
"day": list(range(1, 15)),
"rain": [0,0,1,0,0,1,0, 0,1,0,0,1,0,0],
"works": [0]*7 + [1]*7,
"ekimae": [41,39,30,40,42,31,38, 29,19,27,28,17,30,28], # 駅前店の来店者数(人)
"park": [35,34,26,36,35,25,34, 35,25,34,36,26,34,35], # 公園前店(工事なし)
})
print(df.groupby(["works", "rain"])["ekimae"].mean().round(1))
出力(works=1が工事あり、rain=1が雨):
| 工事 | 雨 | 駅前店の平均来店者数 |
|---|---|---|
| なし | なし | 40.0人 |
| なし | あり | 30.5人 |
| あり | なし | 28.4人 |
| あり | あり | 18.0人 |
ステップ2:雨の条件をそろえて工事の差を見る。雨なしの日どうしで比べると $40.0 - 28.4 = 11.6$ 人、雨ありの日どうしでも $30.5 - 18.0 = 12.5$ 人、工事の日が少ない。天気をそろえても差が残るので、証拠①は工事仮説Aと合います。同時に、雨も約10人の差と対応しています(雨の影響もある)。
ステップ3:比較群(公園前店)を見る。
import pandas as pd
# 架空の14日間(1行=1日)。works: 駅前の道路工事あり=1, rain: 雨=1
df = pd.DataFrame({
"day": list(range(1, 15)),
"rain": [0,0,1,0,0,1,0, 0,1,0,0,1,0,0],
"works": [0]*7 + [1]*7,
"ekimae": [41,39,30,40,42,31,38, 29,19,27,28,17,30,28], # 駅前店の来店者数(人)
"park": [35,34,26,36,35,25,34, 35,25,34,36,26,34,35], # 公園前店(工事なし)
})
print(df.groupby("works")[["ekimae", "park"]].mean().round(1))
print("雨の日数(前半, 後半):", df[df.works == 0].rain.sum(), df[df.works == 1].rain.sum())
| 期間 | 駅前店 | 公園前店 |
|---|---|---|
| 前半(工事なし) | 37.3人 | 32.1人 |
| 後半(駅前で工事) | 25.4人 | 32.1人 |
公園前店は前半・後半で変わらず、駅前店だけが約12人減っています。地域全体の需要減(仮説C)なら公園前店も減るはずなので、証拠②は仮説Cと合いません。雨の日数は前半・後半とも2日で同じなので、証拠③から、天気(仮説B)では前半と後半の差を説明できません。
ステップ4:言えることと言えないことを書く。
- 言えること:後半の来店減は、駅前店に固有で、工事期間と重なっている。雨や地域全体の需要減では説明しにくい。
- 言えないこと:工事が原因だと断定はできない。後半に駅前店だけで起きた別の出来事(競合店の開店、店頭の看板撤去など)でも同じ結果になる。14日間と短く、偶然の変動も否定しきれない。
出力:「工事仮説を最も支持。対立仮説として『同時期の駅前店固有の出来事』が残るため、店頭の変化と近隣の開店情報を確認する。」
意味:L02の判断表に当てはめると、「来店減が工事期間に集中している」行に当たり、チラシは配らず工事終了を待つ判断に近づきます。
操作して理解する:データが違っていたら結論はどう変わるか
次のコードで、公園前店の後半の数字を書き換えて、結論がどう変わるかを考えましょう。
import pandas as pd
# 架空の14日間(1行=1日)。works: 駅前の道路工事あり=1, rain: 雨=1
df = pd.DataFrame({
"day": list(range(1, 15)),
"rain": [0,0,1,0,0,1,0, 0,1,0,0,1,0,0],
"works": [0]*7 + [1]*7,
"ekimae": [41,39,30,40,42,31,38, 29,19,27,28,17,30,28], # 駅前店の来店者数(人)
"park": [35,34,26,36,35,25,34, 35,25,34,36,26,34,35], # 公園前店(工事なし)
})
# 試す1: 公園前店の後半も同じように約12人減っていたら?
df.loc[df.works == 1, "park"] = df.loc[df.works == 1, "park"] - 12
diff = df.groupby("works")[["ekimae", "park"]].mean()
print(diff.round(1))
print("駅前の減少 - 公園前の減少:",
round((diff.loc[0, "ekimae"] - diff.loc[1, "ekimae"]) - (diff.loc[0, "park"] - diff.loc[1, "park"]), 1))
出力では、公園前店も後半に20.1人へ減り、「駅前の減少 − 公園前の減少」は $-0.1$ 人とほぼ0になります。この場合、駅前店の減り方は工事のない店と同じなので、工事仮説の支持は弱まり、地域全体の需要減(仮説C)と合うようになります。同じ駅前店のデータでも、比較群の結果によって結論が逆転します。
考えてほしい問い:
- 雨の日が後半にだけ5日あったら、証拠③はどう変わるでしょうか(天気でも前半・後半の差を説明できてしまうため、工事と天気を区別するには、雨の条件をそろえた比較①がより重要になります)。
- 工事が全店の近くで同時に行われていたら、比較群が作れません。そのときは、工事の始まった日の前後数日の変化や、工事区間からの距離で比べるなど、別の比較を探します。
比較の相手を変えると結論が変わることを体験しておくと、「この証拠の比較相手は何か」を常に確認する習慣が身につきます。
発展:証拠の限界と、必要な証拠の量を決める考え方
偶然の変動:14日間・1日20〜40人の小さなデータでは、たまたま後半に客が少なかった可能性を否定しきれません。差がどの程度なら偶然では説明しにくいかは、統計的検定や信頼区間で評価します(仮説検定・効果量・多重比較(有料版)で扱います)。ここでは「差の大きさ」と「日ごとのばらつき」を並べて書き、断定を避けます。
比較群の条件:公園前店を比較群に使えるのは、「工事がなければ、駅前店と公園前店は同じように動いていた」と考えられる場合です。前半の動きが似ているか(前半の両店の日ごとの増減がそろっているか)を確認します。この考え方は差の差法として 「差の差法と平行トレンド」(有料版) で厳密に扱います。
必要な証拠の量は、判断で決める:L02で見たように、チラシの判断はやり直しやすい判断です。工事仮説を確実に証明するまで待つ必要はなく、「工事が原因である可能性が高く、チラシで回収できる見込みは低い」程度の確からしさで十分なことがあります。逆に、店舗の移転のような不可逆な判断なら、より多くの証拠(長い期間、複数の比較群)を求めます。
確証バイアス(自分の仮説を支持する証拠ばかり探す傾向)を防ぐには、各仮説について「この結果が出たらこの仮説は否定する」という条件を先に書いておくのが有効です。例えば「公園前店も10人以上減っていたら、工事仮説は主要因ではないと判断する」。結果を見てから条件を書くと、都合よく解釈を変えられてしまいます。
よくある失敗
失敗1:どの仮説とも合う証拠を集めて、自分の仮説が証明されたと思う
誤った報告:「工事が原因です。根拠:工事が始まってから来店者数が減っています(37.3人→25.4人)。」
なぜ誤りか:この前後比較は、天気仮説・地域需要減の仮説でも同じように予測されます。区別力がないので、工事仮説の根拠としては弱いです。
直し方:仮説ごとに予測が違う比較を加えます。
| 証拠 | 工事 | 地域需要減 |
|---|---|---|
| 駅前店の前後比較(37.3→25.4人) | 減る | 減る(区別できない) |
| 公園前店の前後比較(32.1→32.1人) | 変わらない | 減る(区別できる) |
区別できる証拠(公園前店)を示したうえで、「工事仮説を支持する」と書きます。
失敗2:条件をそろえずに比べ、別の要因の影響を混ぜる
誤った計算:工事がある日とない日を、雨の日も含めて単純に比べる。もし工事期間に雨の日が集中していたら、工事の差に雨の影響が混ざります。
例えば、工事なしの7日がすべて晴れ(平均40人)、工事ありの7日のうち5日が雨だったとすると、工事の効果が12人でも、雨の影響(約10人×5日分)が加わって、単純比較の差は約19人に膨らみます($12 + 10 \times 5/7 \approx 19.1$)。
なぜ誤りか:比べたい要因(工事)と一緒に動く別の要因(雨)があると、差がどちらによるものか分からなくなります。このような別の要因を交絡(こうらく)要因と呼びます。
直し方:雨の日どうし、雨でない日どうしで比べる(条件をそろえる)。そろえられない場合は、交絡の可能性を「言えないこと」に明記します。交絡の扱いは 「DAGと交絡」(有料版) で詳しく学びます。
失敗3:仮説を否定する条件を決めずに分析を始める
誤った進め方:公園前店も後半に5人減っていた。分析者は「公園前店の減少は小さいので、やはり工事が原因」と書いた。もし公園前店が15人減っていても、「駅前店の方が工事の影響を受けやすい」と工事説を守る説明をしたかもしれない。
なぜ誤りか:どんな結果でも同じ結論になるなら、その分析は仮説を検証していません。結果を見てから解釈を合わせています(確証バイアス)。
直し方:分析の前に、仮説ごとの「否定条件」を書いておきます。
| 仮説 | 否定条件(事前に記入) |
|---|---|
| 工事 | 公園前店も後半に駅前店と同程度(10人以上)減っていたら、主要因ではない |
| 天気 | 雨の日数が前半と後半で同じなら、前半・後半の差の主要因ではない |
| 地域需要減 | 公園前店が後半に減っていなければ、主要因ではない |
まとめ
- 仮説ごとに「正しければ何が見えるか」(予測)を書き、仮説によって予測が違う証拠を探す。
- どの仮説とも合う証拠には区別力がない。比較の相手(比較群・条件をそろえた比較)が区別力を生む。
- 仮説×証拠の証拠マトリクスで、必要なデータと比較を決める。計測や定義の変更は最初に確認する。
- 否定条件は分析前に書く。観察データの証拠は仮説を支持するが証明はしない。残る対立仮説を報告する。
用語
- 予測(仮説からの)(prediction)
仮説が正しい場合に、特定の比較で観測されるはずのこと。
- 比較群(comparison group)
調べたい要因の影響を受けていない対象。同じ期間の変化を比べ、共通の変化を差し引くのに使う。
- 証拠マトリクス(evidence matrix)
仮説を行、証拠を列にして、各仮説がその証拠で何を予測するかを書いた表(この教材での呼び方)。
- 交絡(confounding)
比べたい要因と一緒に動く別の要因があり、差がどちらによるものか区別できなくなること。
- 確証バイアス(confirmation bias)
自分の仮説を支持する証拠ばかり探し、反する証拠を軽く扱う傾向。
よくある質問
仮説を立てずにデータを見てはいけないのですか?
データの形や品質を確かめる探索は必要です(探索的分析・異常・仮説(有料版)で扱います)。ただし、探索で見つけたパターンをそのまま結論にすると、偶然の模様を原因と誤解しやすくなります。探索で仮説を作り、別の比較で確かめる、という順序を守ります。
仮説はいくつまで扱えばよいですか?
判断に関わり、手持ちのデータで区別できるものを2〜4個に絞るのが実務的です。区別できない仮説(データがない、比較群が作れない)は、「残る対立仮説」として報告に書いておきます。
証拠が仮説を「支持する」と「証明する」の違いは?
支持するは「その仮説と合い、少なくとも1つの対立仮説とは合わない」こと、証明するは「他のすべての説明を排除した」ことです。観察データでは後者はほぼ不可能なので、報告では「支持する」「示唆する」を使い、残る対立仮説を書きます。
比較群が見つからないときはどうしますか?
同じ店舗の中で比べられる単位を探します。例えば、工事区間に近い入口と遠い入口、工事の時間帯とそうでない時間帯、などです。それも難しい場合は、判断に十分な確からしさかどうかを意思決定者と相談し、追加調査(来店客へのアンケートなど)を検討します。
計測の変更はなぜ最初に確認するのですか?
数字の作り方が変わっていると、他のすべての比較が「違う定義どうし」の比較になり、意味がなくなるからです。しかも確認は短時間で済むことが多い(システム変更の記録を見る、担当者に聞く)ので、費用対効果が高い確認です。
仕事で「証拠が足りない」と言うのは失礼になりませんか?
言い方を工夫すれば、むしろ信頼につながります。「現時点では工事説を最も支持しますが、競合店の開店の可能性が残ります。来週の近隣調査で区別できます」のように、言えること・言えないこと・次の手を一緒に伝えると、意思決定者は判断の確からしさを把握できます。
確認問題
問1 「工事」「天気」「地域全体の需要減」の3つの仮説を区別するのに、最も役に立たない証拠はどれか。
- ① 駅前店の今月の来店者数が先月より少ない
- ② 工事のない公園前店の来店者数の変化
- ③ 雨の条件をそろえた、工事の日とない日の差
- ④ 前半と後半の雨の日数
解答と解説
正解:①
来店者数が減ったことは、3つの仮説すべてが予測します。区別力がないので、仮説を見分けられません。
問2 工事の日に来店者が少ないことを示すとき、雨の日どうし・雨でない日どうしで比べる理由はどれか。
- ① 計算が楽になるから
- ② 雨の日のデータは不正確だから
- ③ 工事と一緒に動くかもしれない雨の影響を、工事の差から切り離すため
- ④ グラフが見やすくなるから
解答と解説
正解:③
雨の日が工事期間に偏っていると、工事の差に雨の影響が混ざります(交絡)。条件をそろえると切り離せます。
問3 工事のない公園前店は前半・後半で来店者数が変わらず、駅前店だけ減った。この結果から言えることとして最も適切なのはどれか。
- ① 工事が原因であることが証明された
- ② 地域全体の需要減では説明しにくく、駅前店に固有の要因(工事など)を支持する
- ③ 公園前店のデータは役に立たない
- ④ 天気が原因である
解答と解説
正解:②
比較群が変わらないことは地域全体の要因と合いません。ただし、駅前店固有の別の出来事も同じ結果を生むので、証明ではありません。
問4 仮説の「否定条件」をいつ書くべきか。
- ① 分析結果を見た後
- ② 報告書を書くとき
- ③ 否定条件は不要
- ④ 分析を始める前
解答と解説
正解:④
結果を見た後で否定条件を書くと、都合よく解釈を合わせてしまいます(確証バイアス)。分析前に書いておきます。
問5 「雨の日は来店者数が少ない」という観察について正しい説明はどれか。
- ① 雨が来店減の原因であることを示している
- ② 相関を示しているが、それだけでは因果を断定できない
- ③ 因果も相関も示していない
- ④ 雨と来店者数は無関係である
解答と解説
正解:②
一緒に動くこと(相関)は観察できますが、雨の日に別の要因(工事など)が重なっている可能性があるため、因果は条件をそろえて確かめます。
問6 工事のように自分で割り当てられない要因について、仮説の証拠を強めるのに適した方法はどれか。
- ① ランダムに工事の場所を決める実験をする
- ② 前後比較だけを繰り返す
- ③ 工事のない店舗を比較群にして、同じ期間の変化を比べる
- ④ 関係者の意見を多数決で決める
解答と解説
正解:③
割り当てられない要因には実験が使えないため、比較群のある前後比較で地域全体の変化を差し引きます。
次に学ぶこと
次は 指標と分析単位 で、証拠を数字にするための指標(分子・分母・期間)と分析単位(1行が何を表すか)を正確に決めます。今回の「1日当たり来店者数」も、指標の定義の一例です。
条件をそろえる考え方と交絡は 「DAGと交絡」(有料版)、比較群を使った効果の推定は 「差の差法と平行トレンド」(有料版) で本格的に扱います。偶然の変動の評価は 仮説検定・効果量・多重比較(有料版) で学びます。
キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。
アプリを無料で開く有料版と無料版の違い