「ビジネス課題を解決する技術〜数理モデルの力を引き出す3ステップフレームワーク」読んだ
ご恵贈いただきました.遅くなってしまい申し訳ありません.
「ビジネス課題を解決する」とはタイトルにありますが,本書では
- なんらかの問題をどのように数理モデルとして表現すべきか
- その際「とりあえず回帰で」「とりあえず対数変換で」ではなく,「今取り組んでいる問題はどのような構造や仕組みを持っているのか」「それらをどのように数式を用いて表現するか」
を考えるための書籍であると理解しました (その結果,取り組んでいる領域が (たまたま著者の専門だった) 広告に関するタスクだった,ということだと思います).
その思想がもっとも現れているのが2章でしょう.ここでは,CM の接触回数のモデル化について
- とりあえず (深く考えずに) ポアソン分布を当てはめてみる
- これでは駄目な雰囲気が出てくる
- もうちょっと深く考えてみて「ポアソン分布を合成するのはどうか」を試す
- 良さそうなので更に発展させてガンマ分布へ……
- 更に発展すると負の二項分布に……
と step-by-step で進んでいくのが好みでした (Dr.HOUSE が好きなので).
このあたりの「訓練」を本書で積むことで,広告以外のドメインにおいても同様の数理モデルが構築できるようになるのが筆者の狙いではないでしょうか.
とはいえここからは,すごく細かい二つの点に言及します.
一つ目は, 3.3.4 におけるグロスリーチの対数を取った線形回帰モデルでの推定について「しかし,この対数変換という選択には,現象の背後にあるメカニズムに基づいた明確な根拠があるわけではなく」は必ずしもそうは言えないと思います (教科書的な説明の流れとして「何も考えずに対数変換してはいけない」という話であることは重々承知しています).
(2.3.4 のリーチカーブ推定における対数のあてはめも,「限界効用逓減」や「劣モジュラ」などの性質を本タスクが持つことを考えると「対数になりそう」は必ずしも理由を欠いているわけではないように思いますが,このあたりの数理は詳しくないので自信はありません).
二つ目は, 4.3.3 以降からしばしば行う予測モデルの当てはまりの良さの評価において, (Random Forest などの非線形モデルに対しても) 決定係数 R2 が用いられている点です. これについては,本書の同シリーズの「評価指標入門」でも「非線形モデルの評価に用いるべきではない」との記載があります.
AI generates covertly racist decisions about people based on their dialect (Nature, 2024) 読んだ
AI generates covertly racist decisions about people based on their dialect | Nature
まとめ
AI (論文タイトルの AI は LLM を指すが以降 LLM と書く) は方言話者を差別する.
実験1 : LLM が方言話者をどう思っているか
この論文では African American English (AAE) と Standardized American English (SAE) で書かれた文章の比較を通じて,LLM がそれぞれ文章に対してどう異なる反応を示すかを探る.
Evaluational reactions to spoken languages (J. Abnorm. Psychol., 1960)を元ネタにして Matched Guise Probing というテクニックを提案している.
(とはいえ,元論文の書き方が情報系の論文とは異なるのでかなり読みにくい.ここからは順番を変えて説明する.)
すごく大まかに言うと, LLM の score / perplexity などを使って「〜〜〜〜という文章を書く人は (smart, intelligent, ugly, ...)」などを取得し,その分布で AAE と SAE とで差があるかどうかを確認したい.
を LLM,
が AAE または SAE の text,
を token of interest (smart とか intelligent) とした時に
を取得したい.この時
は template と呼ばれるもので,指示文の suffix とか prefix にあたるもの.
確率計算は local LLM ならそのまま取得可能 (余談ですが local LLM っていうレトロニム好きじゃないんですがこれ以外に表現する単語をまだ知らない) ですが Web API 系では取れない. GPT-4 では top-5 の logit が得られる (というバグ? 仕様? とにかくもう塞がれてしまいましたが…) ので,top-5 token 以外は uniform に分布していると考えて正規化する (結構無茶がある).
その上で同じ SAE と AAE で書かれた同一の意味の文章群で p を求めて密度比を計算して……とやると SAE と比較した時に AAE で特徴的な token,つまり LLM の偏見やバイアスによって上位になる token が得られる.
結果
The Princeton Trilogy - AP Psychology Communityというステレオタイプ研究の超古典がある (とこの論文ではじめて知りました). これは,「それぞの人種に対して84語の単語のうち,どれを想起するか?」と聞くことでステレオタイプが測定できるという話.
この結果と,AAE/SAE で得られる token の分布を比較する.
すると,単に AAE の token 上位を見るだけでは差別的ではない (e.g. GPT-4 では passionate, intelligent, ambitious, artistic, brilliant) が,SAE との比較をやると途端にステレオタイプが明らかになる (e.g. GPT-4 ではsuspicious,aggressive,loud,rude,ingorant).この傾向は GPT2,RoBERTa,T5,GPT3.5 でも共通である.
かつ,このステレオタイプを Princeton Trilogy を時系列で観測した結果とどう相関 (厳密な表現ではないが簡単のため) するかを見る.すると
- 密度比を取らない場合,後年の人間の結果との相関がどんどん強くなる
- しかし密度費を取ると,相関が逆転する.1933年の調査との相関が一番強い
という結果が得られる.
実験2 : 方言話者の職業
今度は形容詞ではなく職業名を準備してその出現確率と密度比で議論する. そうすると「AAE がこうあるべき」という職業のステレオタイプが見えるし,かつ,SAEとの相関が弱い,つまりAAE に対するステレオタイプの強さもわかる.
この値と,職業に対する威信度 (prestige) のデータを持ってきてこれを plot すると,AAE との関連が強くなるほど威信が下がるという強い負の相関が見られる (別のデータとの相関を取るのめちゃくちゃ面白い).
実験3 : 犯罪・裁判に関する分析
ここでは2つの実験を行う.
- AAE または SAE で書かれた陳述をもとに, 不特定の罪を犯した被告人を有罪にすべきか無罪にすべきかを LLM に判定させる
- AAE または SAE で書かれた陳述をもとに,第一級殺人を犯した被告人に対して終身刑か死刑かを LLM に判定させる
そもそもなぜこれをやるのかと言うと,アメリカにおけるアフリカ系アメリカ人は人口の12%しか占めないのに受刑者の33%,死刑囚の41%以上を占めているという強固な差別があるから.
ここで与える「陳述」は,事件とは全く関係ないコーパスの文章である点に注意 (事件と関係ないことで純粋な方言のバイアスが抽出できる).
結果は
- 有罪判決は AAE 68.7%,SAE 62.1% で AAE が有罪になりやすい
- 死刑判決は AAE 27.7%,SAE 22.8% で AAE が死刑になりやすい
という身も蓋もない結果.
CXSimulator: A User Behavior Simulation using LLM Embeddings for Web-Marketing Campaign Assessment (CIKM 2024) 読んだ
「ユーザの行動ログから何らかのモデルを構築し,ユーザの行動をシミュレートしたい」という気持ちはよくあることでしょう.たとえば,EC サイトにおけるユーザの閲覧・購買ログを用いて「どのようにユーザは購買に至るのか?」を明らかにする,といったものです.
その際,既存の行動ログに含まれない未知の介入 (e.g. 新たな商品を追加する,値引きクーポンを配布する) を行った際,ユーザの行動がどのように変化するのかがシミュレーションできるとなお嬉しいでしょう.なぜならば,未知の介入によるユーザ行動の変化とそれによる効果を測定するには A/B テストなどを行わなければならず,これには時間的・金銭的なコストが発生するためです.
この論文では
- ユーザ行動のシミュレートをイベント間の遷移確率行列として捉える
- その後,遷移確率行列の各要素 (イベント間の遷移確率) を推定する trainsition probability prediction モデルを構築する
- これはイベント間の link prediction とみなせる
- 「未知の施策によるユーザ行動の変化」を trainsition probability prediction モデルに未知の施策を入力して得られる予測値を遷移確率行列に追加することで表現する
というモデルを提案しています.
short paper なのでかなり記述が割愛されていますが,わかる範囲でまとめます.
(タイトルに LLM と入っていたため,大規模言語モデルによりシミュレーションを行っているのか? と早とちりしましたが実際にはそうではありません)
(以下の見出しは Figure 1 に沿っています)
入力データ
- 「ユーザが何をしたか」のそれぞれ (e.g. 「ページ A を見る」「クーポン B を獲得する」「アイテム C をカートに追加する」など) を「イベント」と呼び,その集合であるユーザ行動ログがあるとする
- イベントには
{"actionType": "Product detail views", "pageTitle": "Office", "pagePath": "/store.html/quickview" , "productName": "Colored Pencil Set", "localProductPrice": "$3.99"}.といった構造化されたメタ情報が付属しているとする
- イベントには
- ユーザにも
{"country": "United States", "browser": "Chrome", "source": "Direct"}.といったセグメント情報が付属しているとする
(a) ユーザ行動を遷移確率行列として捉える
- 全てのログについて「イベント v_i から イベント v_j に何回遷移するか」を全て数え上げることでイベント間の遷移確率行列が推定できる
- 得られる遷移確率行列は
|ユニークなイベント数| x |ユニークなイベント数|の形である - またこの時,遷移確率行列はユーザのセグメントごとに推定する
- 得られる遷移確率行列は
(b) Transition Probability Prediction モデルの構築
- セグメントごとの遷移確率行列の各要素 (v_i, v_j) を目的変数に取る,Transition Probability Prediction モデルを学習する
- 説明変数には以下を用いる
- Transition Probability Prediction モデル推定については,直接遷移確率行列の値を推定せずに,以下のように段階的に推定することで精度が改善する (らしい)
- ふたつのイベント間に遷移が発生するか否かの link prediction (classification)
- 遷移が発生している場合の遷移確率の推定 (regression)
(c) キャンペーン効果の推定
ランダムな予測値における ROC-AUC は0.5,では nDCG は?
先に結論
nDCG@all はどんな予測値やモデルであっても 1.0 に近づくので注意したほうが良さそうです.
疑問
機械学習モデルにおける予測値の評価にはさまざまな指標が用いられます.
- RMSE
- prec / recall / f1-score
- negative log-likelihood
二値分類ではとくに ROC-AUC (Area Under the Receiver Operating Characteristic Curve)1が用いられることが多いでしょう.
ランダムな予測値に対する ROC-AUC はその定義上からも 0.5 になることが知られています.これは非常に便利で,ROC-AUC の厳密な定義を知らない人でも「この予測結果はコイントスよりどれだけ優れているのか」がすぐに把握可能です. (ちなみに ROC-AUC については Quality Metrics in Recommender Systems: Do We Calculate Metrics Consistently? (RecSys 2021) に非常に興味深い話が複数掲載されているので,いつかまとめます.)
ところで,二値分類問題を「予測結果にもとづいて並び替えた時に,より真のラベルを持つものが先頭に来るように並んでいるか?」のようなランキング問題として捉えましょう. この場合は評価指標に nDCG (Normalized Discounted Cumulative Gain)2を用いることがしばしばあります(WWW20113 や KDD20194 など).
(ここでは nDCG の定義は割愛します) さて,機械学習モデルを構築し予測値を得て nDCG で評価する時,「ランダムな予測値に対して nDCG はどのような値を取るのだろうか?」と疑問に思うのが自然でしょう.
関連研究
これに取り組んでいるのが A Theoretical Analysis of NDCG Ranking Measures (COLT 2013) です (余談ですが 2024年2月4日現在,google 検索によるとこの論文に日本語でリンクしているのは 推薦システムの基本的な評価指標について整理してみた | NHN テコラス Tech Blog | AWS、機械学習、IoTなどの技術ブログ のみであり,とはいえ論文の内容には全く言及されていません).
この論文では 3.1 にて
Surprisingly, it is easy to show that for every ranking function, standard NDCG (引用者による注釈 : nDCG@all のこと) converges to 1 almost surely. (中略) At the first glance, the above result is quite negative for standard NDCG. It seems to say that in the limiting case, standard NDCG cannot differentiate ranking functions.
と書かれており,証明である Appendix E を読まずとも Appendix A を見ると
- nDCG@all (評価に全件を用いる場合) はほぼ1に収束しているものの,どうにかアルゴリズム間で多少の差がある (Figure 1)
- nDCG@k (評価にk件を用いる場合) はかなりよく区別がつけられている (Figure 4)
ことがわかります.
実験
COLT の論文の数式を追うのは疲れるので,python のコードで再現しましょう.大まかな方針です.
- N = 100, 200, ..., 100000 と変化させながら以下を繰り返す
- p を 0.1, 0.3, 0,5 で変化させながら以下を繰り返す
- 以下を100回繰り返し,それぞれの nDCG の平均値を計算する
- ランダムな値を N 個作り,予測値とする
- N 個のうち,確率 p でランダムに 1 を,残りに 0 を振ってこれを正解ラベルとする
- k = 1, 10, all で変化させ以下を繰り返す
- nDCG@k(正解ラベル, 予測値, k) を評価する
- 以下を100回繰り返し,それぞれの nDCG の平均値を計算する
- p を 0.1, 0.3, 0,5 で変化させながら以下を繰り返す
from collections import defaultdict import matplotlib.pyplot as plt import numpy as np from sklearn.metrics import ndcg_score from tqdm import tqdm # サンプルデータの生成 rng = np.random.default_rng(6162) results = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: list()))) x_indices = [] top_ks = [1, 10, "all"] probs = [0.1, 0.3, 0.5] for n_samples in tqdm(range(1000, 100001, 1000), ascii=True): x_indices.append(n_samples) predicts = rng.random(n_samples) for p in probs: n_answers = int(n_samples * p) for _ in range(100): answers = np.zeros(n_samples, dtype=int) answers[:n_answers] = 1 rng.shuffle(answers) for k in top_ks: _k = n_samples if k == "all" else k ndcg_at_k = ndcg_score([answers], [predicts], k=_k) results[p][k][n_samples].append(ndcg_at_k) # show for k in top_ks: labels = [] values = [] for p, h in results.items(): _h = h[k] label = f"p={p}, ndcg@{k}" labels.append(label) vals = [np.average(_h[n]) for n in x_indices] values.append(vals) for value in values: plt.plot(x_indices, value) plt.legend(labels) plt.title(f"ndcg@{k}") plt.savefig(f"/tmp/hoge_{k}.png") plt.close()
グラフを見ると



といったように
- nDCG@all は正解ラベルの割合によらず,順調に右肩上がりで 1 に近づいている
- nDCG@k は震えており,心の目で見ると k の値によらずに正解ラベルの割合 = p 周辺にいるように見える
がわかります.特に nDCG@all は見事に再現できました.
結論
- nDCG@all は非常に大きな値が出てしまうこと,アルゴリズム間の値の差が小さく見えてしまうことから,利用時には十分注意したほうが安心でしょう
- nDCG@k がランダムな予測でいくつになるのかはよくわかりません.心の目で見ると k の値によらずに正解ラベルの割合 = p に収束しているようにも見えます
- COLT の論文が読める人がいたら教えてください
参考文献
尾花山ら「データ分析失敗事例集: 失敗から学び、成功を手にする」読んだ
著者から恵贈いただきました.
タイトルの通り,この本ではデータ分析業務において誰もが一度は経験したことのある失敗事案が大量に (25件) 書かれています.
- 冒頭でプロジェクトの利害関係者が整理されているので話に入りやすい
- 分析プロジェクトにおいては受発注,親会社・子会社,協業などの様々な関係が入り乱れることが常です
- 自分がなんらかのプロジェクトに関わる場合にも,このあたりの関係を把握しておくとプロジェクトにおける力関係が把握できて良いと思います
- どの事例も非常によくある
- 「目的より技術が先行してしまう」「思い込みばかりが先行してしまう」「意地やメンツを優先するあまり引き返せなくなってしまう」「意見の妥当さよりパワーバランスが優先されてしまう」など,非常にありふれた原因による失敗がこれでもかと網羅されている
- 振り返りが良い
- インターネットで注目を集めるデータ分析失敗事例は往々にして「技術を理解しない営業・経営者が全部悪い」に落ち着きがちですが,本書はそのような安易な振り返りでは終わりません
- ここが本書の良い点だと思います
- 一方で,あとがきにもあるように「成功を手にする」は難しい
- なぜなら「こうすると失敗する」というのはアンチパターンであって,それを避けたらじゃあ上手くいくのかというとそういうわけでは無いことに注意が必要です
- 「野菜の皮は剥く」「じゃがいもの芽には毒があるから外す」「煮込む時は焦がさないように弱火でかきまぜる」を守っても,まずいカレーは回避できるかもしれませんが美味しいカレーができるわけではないからです
- とはいえここまでいくと「成功」の定義は何かという話になるわけですが
- 以下に書くように議論が盛り上がると思います.会社で本書を使って読書会をするのが良いのでないでしょうか
ここからは個々の事例で気になった点を書きます.
- 「1. UI を統一して UX が破綻する」
- 「4. 本当に季節性はありますか」
- 「7. ほとんど故障しない製品の故障予測」
- 登場人物の「関連会社研究所のデータサイエンティストR氏」を見て「これはR氏がデータを見ずに最先端の論文を振りかざして大失敗する話だ」と予測したら外れた
- 話は良かったですね
- 「10. 成功した報告しか聞きたくない」
- この事例の議論には違和感があり,そもそもB社のマネージャーY氏目線なのか,データサイエンティストT氏目線なのかで話が変わる
- マネージャーY氏目線
- 効果検証ではなく事業提携について検討するための分析であるならば,Y氏がT氏に適切にそれを説明すべき
- そもそもT氏を暴走させるあたりY氏が何もしていないように見える
- Y氏が最終報告会の前に最低限B社関係者に「A社の分析が妥当ではないこと」を根回しするのが落としどころでは
- データサイエンティストT氏目線
- 「X氏の誘導する意思決定は避けられない」ならば,T氏にできることは可能な限り速やかに手を引く,または退職することでしょう
- 今後業務提携が進んだ場合,A / B 社は適切なパワーバランスではなく,X氏による支配は避けられず,同様の事例が発生し続けることが目に見えており明らかにT氏の精神衛生に悪い
- マネージャーのY氏がこれまでと同様に今後何もしないことも目に見えている
- 「X氏の誘導する意思決定は避けられない」ならば,T氏にできることは可能な限り速やかに手を引く,または退職することでしょう
- 「17. いくら分析したところで,売れないものは売れない」
- そこまで分析失敗の事例とは思えません
- 孫請けのデータ分析会社のZ氏について「不良在庫を抱えることになってしまった原因は,契約上の責任はさておき, 技術倫理の立場で言えば,そこを押し切られてしまったZ氏にあると言っても過言ではないでしょう」は言い過ぎ
- 商品設計を失敗したことの方が問題で,Z氏ではなく,発注元A社やウェブ開発会社B社の責任を問うべきでは
- 僕はもっとポジティブで,「黎明期にどのように売り物にしていいかわからない時代にあってもどうにか売上が出ていたのだな」という気持ちです
- これの事案についてはそもそも「我々はインターネット広告が商品として完成した世界に慣れすぎてしまっている」という,後付の理屈があるようにも思いました
- 「25. 機械学習モジュールの寿命」
- とても良い話
- の一方で,そこまで (中長期的に) 成功したのかというといくつか疑問が残ります
- どのような犯罪行為であって,行為の検知やその対応をどのように行っているのか
- これは詳しく書けない領域だとは思いますが
- これによって機械学習を用いるかどうかが変わってくるように思います
- MLOps の維持コストよりもカスタマーサポート側の人的コストの方が高いのではないか
- 悪意を持ったユーザ / システムがルールを回避しようといたちごっこが発生するのが想定される (だからこそクレジットカード会社や SNS などはここにコストを払う) わけですが,その度にルールを書き換えるのか
- どれだけ本気で犯罪行為に対応したいのか
- 極端な話,不正検知を取りこぼしたとしても「ごめんなさい」で済むのならばルールすらもいらない可能性がある
- ユーザやカード会社から問い合わせがあった場合のみ対応すればいい
- このあたりの費用対効果の話になると「技術倫理」という単語から「フォード・ピント事件」を連想するわけですが
- 極端な話,不正検知を取りこぼしたとしても「ごめんなさい」で済むのならばルールすらもいらない可能性がある
- どのような犯罪行為であって,行為の検知やその対応をどのように行っているのか
「評価指標入門〜データサイエンスとビジネスをつなぐ架け橋〜」読んだ
関連記事 : 書籍「評価指標入門」の出版に寄せて 〜監修の想い(O・MO・I) - 株式会社ホクソエムのブログ
著者からいただきました.
この本は大きく
- 予測モデルを構築する取り組みにおいて「真に必要な,計算すべき値は何か」「(その値が計算できない場合,むしろ計算できないことがほとんどですが) 我々は何を代わりに計算しているのか」を自覚し,もっと丁寧に考えるべきである,という啓蒙的な部分
- さまざまな評価指標を紹介する辞典な部分
の二つに分かれています.
- 啓蒙
- このパートは非常に共感しました
- 一方で「このパートが何を説明しようとしているのか」や「なぜこのように一見分かりきったことを説明しなければならないのか」は著者の心情が察せられるというか,このパートが伝わるにはある程度の経験が必要に思いました
- これは決して「このパートが冗長である」ということが言いたいわけではありません
- おそらく,データ分析にたずさわって3年目ぐらいまでの自分では「この本は何を言っているのだろう」と辞典パートまで読み飛ばしていたように思います
- このあたりの話をどう語り継いでいけばいいのか,というのを考えさせられました
- この「考え方」は (悪い教育の例としてしばしば現況される) 「体で覚える」になりがちに思います
- この本を読んだ人が数年後「そういえば今苦しんでいる話は昔読んだあの本が言っていたことなのか」と気付く,そのような形で遅れて響くのでしょう
- 辞典
- 案外と機械学習の教科書に載っていないことがあるので,このようにまとまっていると結構便利
- たとえば機械学習の教科書では定番の Elements of Statistical Learning: data mining, inference, and prediction. 2nd Edition. では ROC-AUC が定義されることなく使われています.なぜ?
- マシューズ相関係数や G-Mean は知らなかったので勉強になりました
- 2.9.2 決定係数 R2 にて「非線形モデルの評価に用いるべきではない」と書いてあるのが良い
- scikit-learn のサンプルコードでも非線形モデルで
r2_scoreが使われている例があったように思います - せっかくなので「なぜ用いるべきではないのか?」まで一言欲しかったです
- scikit-learn のサンプルコードでも非線形モデルで
- 案外と機械学習の教科書に載っていないことがあるので,このようにまとまっていると結構便利
一通り python で予測モデルが書けるようになった人に読んでもらい,「前半についてどのように考えたか」を議論するところから始めるのが良さそうです.
「施策デザインのための機械学習入門 データ分析技術のビジネス活用における正しい考え方」 読んだ
著者よりご恵贈いただきました.いくつか読むべき本があったのですが,社内で読書会をするために優先して読みました.感想を書きます.
著者は当時学部生とは思えないスピードでトップカンファレンスに論文を通している齋藤優太氏とサイバーエージェントにて機械学習と経済学 (特に因果推論) の研究を行っている,「効果検証入門」の著者でも知られる安井翔太氏.監修はホクソエム社.
第一線で活躍する若手研究者が日本語で本を書くことがどんなに貴重か (一部の研究者が「日本語の原稿や国内学会は業績ではないので意味がない.運営負荷も高いために縮小・廃止すべきだ」「日本語の専門書は不要であり,原著を読める人間だけが読めばいい.」と主張している背景があります) という話をしても一部の人にしか伝わらないと思うので本の話を順にします.
本書の教えがどこまで再現できるかに関わらず,機械学習モデルを用いて何らかの意思決定を行う人は一度読むと非常に勉強になると思います.また,この領域の研究者がどのような問題意識を持っているのか,どのような単語や記号で定式化しているのかがわかるため,論文を読むための足がかりとしても有効だろうと思います.
1章「機械学習実践のためのフレームワーク」
1章「機械学習実践のためのフレームワーク」では,本書の根底にある「フレームワーク」の導入が行われます.これは目次にそのまま書かれているのですが,本書において特に強調されているのは「データの観測構造をモデル化する」「観測データを用いて解くべき問題を近似する」の2点ではないでしょうか.
データの観測構造への理解・認識が曖昧なままだと,誤った仮定や思い込みを解消することができず,その結果得られるモデルにバイアスが生じます.これを説明しているのが前者です.そしてバイアスを観測データからいかに除去するか,また,いかにして軽減できるよう (本来解くべきであるが様々な理由によって解けない真のモデルを) 近似したモデルを構築できるかが後者です.
表1.3 の例はその最たるものです (「効果検証入門」の読者には見覚えがあるでしょう).この表から「クーポン配布は性別に関わらずランダムに配信されている」という思い込みに従ってナイーブにクーポンの効果を計算してしまうと,本来の効果 (そもそもこれが観測できないから困っているわけであり,永遠の課題ですが) とは異なる値が得られてしまいます (ここまで読んだところで「効果検証入門」で述べた回帰による効果の推定が本書では行われていないことに気付きました).
この1章のフレームワークにもとづいて,続く章では具体的な問題とバイアスについて触れています.
2章「機械学習実践のための基礎技術」
ここからは具体的な問題に取り組みます.まずは属性推定です (これは属性推定だけでなく, look-alike などにも適用可能でしょう).この時,学習は属性情報が付与された会員データが対象であり,予測 (推論) 時には属性情報が付与されていない非会員データが対象であるため,「会員になるかならないか」がランダムではなく,何らかの要因によって偏っている場合,モデルにはバイアスが含まれてしまいます.言葉にすると何となく分かることを数式を用い「ここにバイアスが生まれる余地がある」「よっての項を追加すると良い」と説明されるのでとても気分が良いです.
次に取り組むのは,既に何らかの意思決定モデルが動作しており,その結果として得られるログを対象により良い意思決定を推定する問題です.過去動作していた意思決定モデルによるバイアスを軽減するために IPS (Inverse Propensity Score) 推定量や Doubly-Robust (DR) 推定量の説明が行われます.ここの説明も一見 IPS だけでいいように見せかけてよく考えるとこれデータがもったいないのでは? という気持ちから DR の説明に入るので理解が進みます.しかし DR 推定量は特に数式の説明がなく唐突に現れるため,この道理を知るためには元論文を読む必要がありそうです.
著者らの研究成果である Open Bandit Pipeline についての説明も1節を割いて行われています.これは社内読書会で検証する際にちゃんと読みます.
3章「Explicit Feedback を用いた推薦システム構築の実践」
続いては商品推薦タスクです. Explicit Feedback と呼ばれるシチュエーションでは,ユーザは商品の評価を uniform に行うわけではなく,そもそもユーザは興味がある程度ある商品しか評価を行わないため,結果として観測されるデータにはバイアスが含まれてしまいます.ではこのデータからより良いモデルを学習するにはどうすればいいのか? という話と,研究用データセットを用いた検証が行われています.
4章「Implicit Feedback を用いたランキングシステム構築の実践」
こちらも商品推薦タスク (タイトルは「ランキングシステム」ですがここでは簡単のため商品推薦タスクと呼びます) です. Implicit Feedback という状況において,3章とは異なるバイアスを考慮しています.それは
- ポジションバイアス : 商品がユーザに表示される順序が上位であればあるほどクリックされやすい.反対に順序が下位のアイテムがクリックされなかった場合,興味がないのか,そもそもユーザの目に入っていないのかの区別がつかない
- 選択バイアス : そもそも商品がユーザに表示されていない
- クリックノイズ : ユーザが誤って興味が無い商品をクリックしているかもしれない
の3つです.これらをどう組み込むかを段階的に説明しています.
5章「因果効果を考慮したランキングシステムの構築」
最後に,「クリック後の購買行動」などを KPI にした時の「推薦機能由来での KPI を最大化する施策」と「プラットフォーム全体での KPI を最大化する施策」の推定について触れています.特に後者は推薦枠が有限である場合,推薦しなかった場合の売上と推薦した場合の売上それぞれを考慮し,最も良いものを探す,という話で uplift modeling の雰囲気を感じます.
本書の良いところと限界
本書の良いところは「バイアスから目をそらすな」という話を繰り返し述べている点です.本書を読み終わり,思想をある程度理解した読者においては,つい手癖で手元のデータに対して何も考えずにモデルを作ってしまう前に「お前の手元にあるデータにはこのような偏りが入っているはずだが?」という内なる著者らからの指摘がきっと入るでしょう.
とはいえ本書の内容がそのまますぐに日々の業務に反映できるかと言われると,そのまま適用できる人は少ないのではないかと思います.
たとえば3章の IPS 推定量に必要な傾向スコアの計算には,完全にバイアスが存在しないデータが必要であり,後段の Yahoo! R3 データでの実験でも (ランダムに収集されバイアスが存在しない) テストデータの一部を用いて傾向スコアを計算しています.3.6 にて補足が入るものの,「このデータにはバイアスがかかっています.それをどう補正したらいいでしょう?」 -> 「ここにバイアスのかかっていないデータがあるので補正に使います」の流れには困惑しました.
また,2章では「過去,どのような値にもとづいて施策を行ったか」を示す (「古い意思決定モデルの行動選択確率」と呼ばれています) の値が必要です (とはいえ p79 において既存のデータから推定する方法にも触れられています).4章においても,説明している手法の学習には「これまでどのユーザにどの順序で商品を表示していたか」のデータが必要です.これらのデータが現行のシステムにて保存されていない場合には本書の手法をそのままでは適用できません.
とはいえ「では本書は全く役に立たないのか」というわけではなく,
- これからはなるべく今後のために施策にまつわるデータを収集しよう
- 「現状のデータにはバイアスが含まれている」と意識することにまず意味がある
- バイアスを軽減するためのさまざまな手法が研究・開発されているのだから,困ったら本書や本書が言及している論文を読もう
という話ではないかと思います.繰り返しになりますが,本書の教えがどこまで再現できるかに関わらず,機械学習モデルを用いて何らかの意思決定を行う人は一度読むと非常に勉強になると思います.
細かい話
- 2章で「データサイエンティストはこうやってナイーブな統計量を出してしまうがそれでは駄目」と散々な書き方をしており,そこまで言わなくてもいいのではないかと思いました
- 表1.2 と表2.2 の話,気持ちはわかるのですが表現が適切でないように思います.ここでは「推定した値と真の値との誤差」でどちらのモデルが良いかを議論し,誤差が小さいモデルで意思決定をすると失敗する (モデルの推定誤差と,そのモデルに従って振る舞った時との結果が食い違う) という話なのですが,そもそも真の値を知っているのならばモデルを推定する必要がない (真の値にもとづいて意思決定すればいい) でしょうし,「モデル評価では真の値を確認できるが意思決定時には参照できない」というのも不自然に思います.より正確には「既知のデータでモデルを推定する」「未知のデータに当てはめる」「既知と未知のデータは同様であるという強い仮定がある」「よって既知のデータに対する誤差が優れたモデルを採用し未知のデータの意思決定に用いる」だと思うのですが,お気付きのようにこの説明はとても面倒です
- p170 の式は先頭の項に閉じ括弧が一つ足りないと思います.恐らくは



