研究の仕事を小例で体験|データ・AI・4つの仕事を知る
このページはプロモーション(広告)を含みます。
データ・AI・4つの仕事を知る(初級・読む20分+演習30分)
この授業のゴール
- 研究の問いを、仮説・比較の条件・指標・判断基準に分けて書ける
- 複数回の結果から、平均と標準偏差、勝った回数を計算し、差がばらつきに比べて大きいかを判断できる
- 条件の不揃い・最良値の報告・結果を見たあとの指標変更を、不公平な比較として指摘できる
- 結論を「この条件では」と限定し、追加で必要な実験を提案できる
仕事でどう使うか
研究(RS:Research Scientist/研究者)の仕事は、新しい方法が本当に良いのかを、公平な条件で確かめ、結論の範囲を限定して報告することです。「良さそう」と「良いと言える」の間には、条件をそろえた比較があります。
| 路線 | この授業の使いどころ |
|---|---|
| DS(データサイエンティスト) | 施策の前後比較で、差がばらつきを超えるかを確認してから報告する |
| ML(機械学習エンジニア) | モデルの比較で、同じ分割・同じ指標・複数の乱数で評価し、最良値だけを報告しない |
| DX(DX推進・AI企画) | 業務改善の試行を、導入前後の条件をそろえて評価する |
| RS(研究者) | 問い・仮説・条件・指標・判断基準を事前に書き、結果と限界を再現できる形で記録する |
研究職でない人にも、この考え方は役に立ちます。会議で「新しい方法は良かった」と聞いたときに、「何と、何の条件で、何回比べたか」と問い返せるようになります。
前提
- 予測の誤差(MAE)とベースラインの考え方 → 分析と予測と生成の違い、MLの仕事を小例で体験
- 平均の計算 → 平均・合計・中央値を手計算
- 標準偏差(データのばらつきの大きさ)は、この授業の中で式と数値で説明します。
Pythonでは、標準ライブラリの statistics モジュール(mean() は平均、stdev() は標準偏差)を使います。
身近な状況:「新しい予測法のほうが良かった」
雑貨店チェーン「ことり堂」(架空)の研究チームが、新しい需要予測法Yを作りました。現在の方法X(前週の同じ曜日と同じ値)と比べるため、5店舗で予測し、平均絶対誤差(MAE、単位:個。小さいほど良い)を測りました。
| 店舗 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 方法X のMAE(個) | 5.2 | 4.8 | 5.5 | 5.0 | 4.6 |
| 方法Y のMAE(個) | 4.9 | 5.1 | 5.0 | 4.7 | 4.8 |
平均は、Xが5.02個、Yが4.90個です。担当者は「Yのほうが0.12個良い。導入しよう」と報告しようとしています。
ここで研究者は立ち止まります。0.12個の差は、偶然のばらつきの範囲ではないか。 店舗2ではXのほうが良く、店舗5でもYは4.8でXの4.6より悪い。比べ方に問題がないか、確認すべきことが多いのです。
直感的な説明:公平な競走と、複数回の測定
2人の走者が、どちらが速いかを競う場面を考えます。
- 同じコース・同じ距離で走らせる(条件をそろえる)。
- 1回だけでなく、何回も走らせる(偶然を減らす)。
- 勝ち負けの基準を走る前に決める(後から変えない)。
- 平均タイムの差が、毎回のばらつきより十分大きいかを見る。
もし片方の走者だけが、新しい靴で、追い風の日に、いちばん良い記録を報告したらどうでしょう。比較は公平ではありません。予測法の比較も同じで、条件の不揃い、最良値だけの報告、結果を見てからの基準変更が、よく起きる不公平です。
注意:研究は「新しい方法が勝った」ことを示す作業ではありません。勝ったと言える条件と、言えない条件を示す作業です。「差は偶然の範囲かもしれない」という結論も、立派な成果です。
正確な定義:問い・仮説・条件・判断基準・ばらつき
研究計画の部品を定義します。
- 問い:答えが検証できる1文。例:「5店舗の翌週予測で、YはXよりMAEが小さいか。」
- 仮説:結果で否定され得る主張。例:「YのMAEの平均は、Xより小さい。」
- 条件の固定:データ、分割(学習期間と評価期間)、指標、乱数、調整にかける労力を、両方の方法で同じにする。
- 判断基準の事前設定:結果を見る前に決める。例:「5店舗のうち4店舗以上でYが良く、かつ平均の差がペアごとの差の標準偏差より大きい。」
- 再現性:他の人が同じ手順で同じ結果を得られること。データの版、コード、乱数、日付を記録する。
ばらつきは、標準偏差で測ります。値が $x_1, \dots, x_n$、平均が $\bar{x}$ のとき、標本標準偏差は次の式です。
$$s = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})^2}$$
$n$ は値の個数、$\bar{x}$ は平均、$(x_i - \bar{x})$ は平均からのずれ、$s$ は元の値と同じ単位(個)のばらつきの大きさです。$n-1$ で割るのは、標本から母集団のばらつきを推定するための標準的な方法です(理由は発展の話題です)。
方法Xの値 $(5.2, 4.8, 5.5, 5.0, 4.6)$ で計算します。平均は $25.1 \div 5 = 5.02$。ずれは $0.18, -0.22, 0.48, -0.02, -0.42$。二乗の合計は $0.0324+0.0484+0.2304+0.0004+0.1764=0.488$。$s = \sqrt{0.488 \div 4} = \sqrt{0.122} \approx 0.349$ 個です。
同じ店舗どうしのペアの差(X−Y)を取ると、$(0.3, -0.3, 0.5, 0.3, -0.2)$。平均は $0.12$、標準偏差は約 $0.349$ 個です。平均の差0.12は、差のばらつき0.35より小さいことが分かります。
段階付き例題:結果を読んで、結論を限定する
ステップ1:計算する。次のコードで、平均・標準偏差・ペアの差・Yが良かった回数を出します。zip(a, b) は2つのリストを同じ位置どうしで組にします。
from statistics import mean, stdev
x = [5.2, 4.8, 5.5, 5.0, 4.6] # 方法X のMAE(個)
y = [4.9, 5.1, 5.0, 4.7, 4.8] # 方法Y のMAE(個)
diff = [a - b for a, b in zip(x, y)] # X-Y: 正ならYのほうが良い(誤差が小さい)
print("Xの平均", round(mean(x), 3), "標準偏差", round(stdev(x), 3))
print("Yの平均", round(mean(y), 3), "標準偏差", round(stdev(y), 3))
print("ペアの差", [round(d, 1) for d in diff])
print("差の平均", round(mean(diff), 3), "差の標準偏差", round(stdev(diff), 3))
print("Yが良かった店舗数", sum(d > 0 for d in diff), "/", len(diff))
出力は、Xの平均5.02・標準偏差0.349、Yの平均4.9・標準偏差0.158、ペアの差 [0.3, -0.3, 0.5, 0.3, -0.2]、差の平均0.12・標準偏差0.349、Yが良かった店舗数 3 / 5 です。
ステップ2:事前の判断基準と照らす。基準は「5店舗中4店舗以上でYが良い」かつ「差の平均が差の標準偏差より大きい」でした。結果は、3/5店舗、0.12 < 0.349 で、どちらも満たしません。
ステップ3:結論を書く。「5店舗の評価では、YはXより平均で0.12個小さいMAEだったが、店舗による差のばらつき(0.35個)より小さく、Yが優れているとは言えない。Yのばらつき(標準偏差0.16)がXより小さい可能性があるが、5店舗では確かめられない。」
ステップ4:次の実験を提案する。(a)店舗数を増やす(たとえば20店舗)、(b)評価期間を複数にする、(c)Yの調整にかけた労力をXにもかける、(d)判断基準を実験前に確定する。
操作して理解する:内蔵データで、効果の一部を分ける
内蔵のデータ benchmark.csv には、3つのデータセット(D1〜D3)で、3つの方法を5回ずつ(乱数 seed 0〜4)評価した正解率(accuracy、大きいほど良い)が入っています。方法は、基準 baseline、提案法 proposed、提案法からデータ拡張(元のデータに少し変更を加えて訓練データを増やす工夫)を除いた proposed_no_aug です。このように、提案法の部品を1つ外して比べることをアブレーション(部品除去実験)と呼びます。
import pandas as pd
d = pd.read_csv('/data/benchmark.csv')
table = d.groupby(['dataset', 'method'])['accuracy'].agg(['mean', 'std']).round(4)
print(table)
出力の平均は次のとおりです(標準偏差は同時に表示されます)。
| データセット | baseline | proposed_no_aug | proposed |
|---|---|---|---|
| D1 | 0.8010 | 0.8100 | 0.8146 |
| D2 | 0.7442 | 0.7561 | 0.7684 |
| D3 | 0.8419 | 0.8490 | 0.8541 |
読み方。3つのデータセットすべてで、baseline < proposed_no_aug < proposed の順です。提案法の改善(D1で0.0136、D2で0.0242、D3で0.0122)の一部は、データ拡張以外の部品によるものだと分かります。
ただし、各データセットでの標準偏差は0.004〜0.0125で、D1とD3の改善幅(0.0122〜0.0136)と同程度です。5回では、差がはっきり言えるとは限りません。ペア(同じ seed どうし)で見ると、proposed が baseline を上回った回数は、D1が5回中4回、D2とD3が5回中5回です。
試してみましょう。d.groupby('method')['accuracy'].mean() で、3つのデータセットをまとめた平均を出し、proposed と baseline の差を計算してください(答え:およそ0.8124と0.7957で、差は約0.0167)。まとめた平均は、データセットごとの違いを隠します。まとめる前に、分けて見る習慣が大切です。
発展:検定、多重比較、一般化の範囲
統計的検定は、「差が偶然のばらつきで生じる確率」を見積もる道具です。ペアの差が $d_1, \dots, d_n$ のとき、平均差を標準誤差 $s_d / \sqrt{n}$ で割った値($t$ 値)を使う対応のある $t$ 検定がよく使われます。例題では $0.12 \div (0.349 / \sqrt{5}) \approx 0.77$ で、小さな値です(差が偶然のばらつきで生じた可能性を否定できない、という意味)。本授業では計算式と判断の考え方だけを扱い、詳しい扱いは統計の授業に譲ります。
多重比較:指標を10種類試して、1つだけ良かった結果を報告すると、偶然に良く見える結果を拾うことになります。比較の数と、実際に報告した数を記録します。
一般化の範囲(外的妥当性):5店舗の結果が、他の店舗や他の季節にも当てはまるとは限りません。結論には対象の範囲を添えます。
$n-1$ で割る理由:標本の平均は、標本自体のデータに合わせて決まるので、平均からのずれは母集団のばらつきより小さく出ます。$n-1$ で割ると、この偏りが補正されます。
倫理とデータの扱い:実在の顧客のデータを使う場合は、個人が特定されない形にし、利用目的に合うデータだけを使います。先行研究や他社の結果を引用するときは、出典を確認し、自分の結果と混同しません。
よくある失敗
失敗1:平均の差だけで「勝った」と報告する
方法Yの平均は4.90、Xは5.02で「Yの勝ち」と報告するのは、ばらつきを無視した判断です。
from statistics import mean, stdev
x = [5.2, 4.8, 5.5, 5.0, 4.6]
y = [4.9, 5.1, 5.0, 4.7, 4.8]
d = [a - b for a, b in zip(x, y)]
print("差の平均", round(mean(d), 2), "差のばらつき", round(stdev(d), 2))
print("差がばらつきより大きいか", mean(d) > stdev(d))
出力は「差の平均 0.12 差のばらつき 0.35」「差がばらつきより大きいか False」です。
直し方:平均の差と、そのばらつき(標準偏差)、勝った回数を並べて報告します。事前に決めた判断基準で結論を出します。
失敗2:最良の1回だけを報告する
同じ方法Yを乱数を変えて5回動かしたところ、正解率が [0.80, 0.82, 0.79, 0.81, 0.83] でした。一方、基準Xは1回だけ動かして0.81でした。「Yの最高値0.83はXの0.81より2ポイント高い」と報告するとどうなるでしょう。
from statistics import mean, stdev
y_runs = [0.80, 0.82, 0.79, 0.81, 0.83]
x_one = 0.81
print("Yの最良", max(y_runs), "Xの1回", x_one)
print("Yの平均", round(mean(y_runs), 3), "標準偏差", round(stdev(y_runs), 4))
出力は「Yの最良 0.83 Xの1回 0.81」「Yの平均 0.81 標準偏差 0.0158」です。平均で見ればYとXは同じです。Yだけを複数回動かして最良を選び、Xは1回だけという比較は、不公平です。
直し方:両方の方法を同じ回数だけ動かし、平均・標準偏差・全体の分布を報告します。調整にかける労力も同じにします。
失敗3:結果を見てから、指標を選び直す
方法Xの日別誤差が [1, 1, 1, 1, 10]、Yが [3, 3, 3, 3, 3] でした。平均絶対誤差では、Xが2.8、Yが3.0でXの勝ちです。しかし、担当者はYを推したいので、「最大誤差」という指標に変えました。
x = [1, 1, 1, 1, 10]
y = [3, 3, 3, 3, 3]
print("MAE X", sum(x) / len(x), "Y", sum(y) / len(y))
print("最大 X", max(x), "Y", max(y))
出力は MAE が X 2.8・Y 3.0、最大誤差が X 10・Y 3 です。どちらの指標も妥当ですが、結果を見てから選ぶと、勝てる指標を探す操作になります。
直し方:指標は実験の前に、業務の目的(平均的な精度か、最悪のときの損失か)から決めて記録します。複数の指標を報告するなら、事前にすべて列挙し、結果が分かれたときの扱いも決めておきます。
まとめ
- 研究は、問い・仮説・条件・指標・判断基準を事前に書き、条件をそろえて比べる。
- 平均の差は、ばらつき(標準偏差)や勝った回数と並べて読む。差がばらつきより小さければ、結論は保留する。
- 不公平な比較の代表例は、条件の不揃い、最良値だけの報告、結果を見てからの指標の変更。
- アブレーションは、部品を外して各部品の寄与を確かめる実験。
- 結論は「この条件では」と範囲を限定し、追加の実験を提案する。
用語
- 標本標準偏差(sample standard deviation)
値の平均からのずれの大きさを表す指標。ずれの二乗和を n−1 で割って平方根を取る。
- アブレーション(ablation study)
提案法の部品を1つ外して比べ、各部品が結果にどれだけ寄与するかを調べる実験。
- 再現性(reproducibility)
他の人が同じ手順・データで同じ結果を得られること。
- バイアス(bias)
比較や推定を一方向にずらす偏り。店舗の自己選択、最良値の選択など。
よくある質問
研究者は、新しい手法を発明する人だけですか?
新しい手法を作る人も、既存の手法の条件や限界を調べる人もいます。どちらも、問いを立て、条件をそろえて比べ、結論の範囲を限定する点は同じです。企業の研究部門、大学、公的機関などで働き方は違います。
5回の実験は少なすぎますか?
小さな差を強く言うには少ないことが多いです。この授業は、手計算できる小さな例として5回を使いました。実際には、差の大きさとばらつきから、必要な回数を見積もります。
標準偏差と標準誤差はどう違いますか?
標準偏差は個々の値のばらつきです。標準誤差は、平均の推定のばらつきで、標準偏差を√n で割った値に当たります。平均の差が偶然かを見るときは、標準誤差を使います。
提案法が勝てなかったら、研究は失敗ですか?
失敗ではありません。「この条件では差が出なかった」ことも、他の人が同じ実験を繰り返さずに済む価値のある結果です。条件と結果を記録して報告します。
判断基準は、なぜ実験の前に決めるのですか?
結果を見てから基準を決めると、都合のよい結果を選びやすくなるからです。事前に基準を決め、記録しておくと、結果の信頼性が上がります。
DSやMLの実務でも、この考え方を使いますか?
使います。施策の前後比較、モデルの比較、A/Bテストの判断で、同じ条件、複数回、事前の基準、ばらつきとの比較が必要です。肩書にかかわらず、結論の信頼性を支える基本です。
確認問題
問1 方法Yの平均誤差がXより0.12個小さく、ペアの差の標準偏差が0.35個だった。この結果の解釈として適切なものはどれか。
- ① Yが明確に優れている
- ② 差がばらつきより小さく、Yが優れているとは言い切れない
- ③ Xが明確に優れている
- ④ 平均の差は無視してよい
解答と解説
正解:②
差の平均がばらつきより小さいと、偶然の範囲かもしれません。結論は保留し、追加の実験を提案します。
問2 提案法だけを乱数を変えて5回動かし、最良の値を、基準法の1回の値と比べた。何が問題か。
- ① 問題はない
- ② 提案法が不利になる
- ③ 条件が不揃いで、最良値の選択により提案法が有利になる
- ④ 乱数を変えてはいけない
解答と解説
正解:③
回数を揃えず、最良を選ぶと、偶然に良かった値を拾うことになります。両方を同じ回数動かして平均とばらつきを報告します。
問3 結果が出てから「別の指標のほうが提案法に有利だ」と指標を変えた。研究として望ましい対応はどれか。
- ① 有利な指標で報告する
- ② 指標は何でもよい
- ③ 指標を変えて、元の指標は隠す
- ④ 指標を実験前に決めて記録し、事後に追加した指標は「追加分析」と明記する
解答と解説
正解:④
結果を見てからの指標選びは、勝てる指標を探す行為になります。事前の記録と、事後の分析の明示が必要です。
問4 アブレーション(部品除去実験)の目的として最も適切なものはどれか。
- ① 提案法の部品を1つ外して比べ、各部品の寄与を確かめる
- ② 提案法を必ず良く見せる
- ③ データを削除する
- ④ 基準法を使わない
解答と解説
正解:①
部品を1つ外して比べると、その部品が結果にどれだけ効いているかが分かります。
問5 値 (2, 4, 6) の標本標準偏差(n−1で割る)はいくつか。
- ① 約1.63
- ② 2
- ③ 約2.83
- ④ 4
解答と解説
正解:②
平均は4、ずれは −2, 0, 2。二乗の合計は8。8÷(3−1)=4。平方根は2です。
問6 10店舗の結果から「全国の店舗で新手順は有効」と結論した。この記述の問題はどれか。
- ① 問題はない
- ② 全国のデータは使えない
- ③ 10店舗は多すぎる
- ④ 対象の範囲を超えた一般化で、結論は「この店舗・この期間では」と限定すべき
解答と解説
正解:④
結果が当てはまる範囲(店舗の種類、期間、季節)を超えて主張すると、検証されていない結論になります。
次に学ぶこと
これでON03の6授業が完了です。総合テストと、4つのメモ(分析・予測・改善・比較実験)を作る統合課題に進んでください。基礎の割合や平均の計算に不安があれば、比率・割合・パーセントポイント、平均・合計・中央値を手計算 で補ってください。
この授業の確認問題だけで習得とはしません。ON03 の総合テストと、自力課題で判定します。
キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。
アプリを無料で開く有料版と無料版の違い