研究の仕事を小例で体験|データ・AI・4つの仕事を知る

このページはプロモーション(広告)を含みます。

データ・AI・4つの仕事を知る(初級・読む20分+演習30分)

この授業のゴール

仕事でどう使うか

研究(RS:Research Scientist/研究者)の仕事は、新しい方法が本当に良いのかを、公平な条件で確かめ、結論の範囲を限定して報告することです。「良さそう」と「良いと言える」の間には、条件をそろえた比較があります。

路線 この授業の使いどころ
DS(データサイエンティスト) 施策の前後比較で、差がばらつきを超えるかを確認してから報告する
ML(機械学習エンジニア) モデルの比較で、同じ分割・同じ指標・複数の乱数で評価し、最良値だけを報告しない
DX(DX推進・AI企画) 業務改善の試行を、導入前後の条件をそろえて評価する
RS(研究者) 問い・仮説・条件・指標・判断基準を事前に書き、結果と限界を再現できる形で記録する

研究職でない人にも、この考え方は役に立ちます。会議で「新しい方法は良かった」と聞いたときに、「何と、何の条件で、何回比べたか」と問い返せるようになります。

前提

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人の走者が、どちらが速いかを競う場面を考えます。

もし片方の走者だけが、新しい靴で、追い風の日に、いちばん良い記録を報告したらどうでしょう。比較は公平ではありません。予測法の比較も同じで、条件の不揃い、最良値だけの報告、結果を見てからの基準変更が、よく起きる不公平です。

注意:研究は「新しい方法が勝った」ことを示す作業ではありません。勝ったと言える条件と、言えない条件を示す作業です。「差は偶然の範囲かもしれない」という結論も、立派な成果です。

正確な定義:問い・仮説・条件・判断基準・ばらつき

研究計画の部品を定義します。

ばらつきは、標準偏差で測ります。値が $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個だった。この結果の解釈として適切なものはどれか。

  1. ① Yが明確に優れている
  2. ② 差がばらつきより小さく、Yが優れているとは言い切れない
  3. ③ Xが明確に優れている
  4. ④ 平均の差は無視してよい
解答と解説

正解:②

差の平均がばらつきより小さいと、偶然の範囲かもしれません。結論は保留し、追加の実験を提案します。

問2 提案法だけを乱数を変えて5回動かし、最良の値を、基準法の1回の値と比べた。何が問題か。

  1. ① 問題はない
  2. ② 提案法が不利になる
  3. ③ 条件が不揃いで、最良値の選択により提案法が有利になる
  4. ④ 乱数を変えてはいけない
解答と解説

正解:③

回数を揃えず、最良を選ぶと、偶然に良かった値を拾うことになります。両方を同じ回数動かして平均とばらつきを報告します。

問3 結果が出てから「別の指標のほうが提案法に有利だ」と指標を変えた。研究として望ましい対応はどれか。

  1. ① 有利な指標で報告する
  2. ② 指標は何でもよい
  3. ③ 指標を変えて、元の指標は隠す
  4. ④ 指標を実験前に決めて記録し、事後に追加した指標は「追加分析」と明記する
解答と解説

正解:④

結果を見てからの指標選びは、勝てる指標を探す行為になります。事前の記録と、事後の分析の明示が必要です。

問4 アブレーション(部品除去実験)の目的として最も適切なものはどれか。

  1. ① 提案法の部品を1つ外して比べ、各部品の寄与を確かめる
  2. ② 提案法を必ず良く見せる
  3. ③ データを削除する
  4. ④ 基準法を使わない
解答と解説

正解:①

部品を1つ外して比べると、その部品が結果にどれだけ効いているかが分かります。

問5 値 (2, 4, 6) の標本標準偏差(n−1で割る)はいくつか。

  1. ① 約1.63
  2. ② 2
  3. ③ 約2.83
  4. ④ 4
解答と解説

正解:②

平均は4、ずれは −2, 0, 2。二乗の合計は8。8÷(3−1)=4。平方根は2です。

問6 10店舗の結果から「全国の店舗で新手順は有効」と結論した。この記述の問題はどれか。

  1. ① 問題はない
  2. ② 全国のデータは使えない
  3. ③ 10店舗は多すぎる
  4. ④ 対象の範囲を超えた一般化で、結論は「この店舗・この期間では」と限定すべき
解答と解説

正解:④

結果が当てはまる範囲(店舗の種類、期間、季節)を超えて主張すると、検証されていない結論になります。

次に学ぶこと

これでON03の6授業が完了です。総合テストと、4つのメモ(分析・予測・改善・比較実験)を作る統合課題に進んでください。基礎の割合や平均の計算に不安があれば、比率・割合・パーセントポイント、平均・合計・中央値を手計算 で補ってください。

この授業の確認問題だけで習得とはしません。ON03 の総合テストと、自力課題で判定します。

キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。

アプリを無料で開く有料版と無料版の違い