# YarnIt ## 概要 YarnIt(サイト名: yarnit.ai)は、書籍『信頼性の高い機械学習』が MLライフサイクルの各段階を具体的に説明するために用いる架空のオンライン小売店である。世界中の買い物客が編み物やかぎ針編みに最適な毛糸を、AI による推薦で見つけられるショッピングサイトという設定で登場する。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 1 はじめに]] §1.1.3) 1章では、データ収集と分析の段階で組織のほぼ全員(ビジネスチーム、製品チーム、プロダクトエンジニア、MLエンジニア、SRE)が関与する例として、また買い物客に追加の商品を推薦するモデル(ユーザーの購買履歴・カート内商品・配送先国・購入価格帯を入力とし、購入検討商品のランキングを作成するモデル)の統合例として使われる。このモデルはショッピングカートのすぐ下に水平方向のリストとして推薦結果を表示する形で統合される想定であり、ユーザーの行動(カート追加・購入)をログに記録することで、モデル自身の推薦品質を訓練・改善するフィードバックループの起点にもなる。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 1 はじめに]] §1.1.1, §1.1.3) ## データ感度とプライバシーの事例(2章) 2章は、YarnIt がスペイン語圏の市場で運営する決済に大規模な障害が発生し、スペイン語での検索の注文完了数が大幅に減少した場合を思考実験として扱う。この場合、推薦モデルはスペイン語結果が購入につながりにくいと学習してしまい、スペイン語結果の表示を減らし始める。北米・ヨーロッパが主市場であれば購入総件数の減少はわずかで、この偏りは総クエリ量のレベルでは検出しづらい。決済障害が解消してもモデルの偏った学習が売上悪化を長引かせる、という MLパイプラインのデータ感度の実例として使われる。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 2 データマネジメント]] §2.2) 同章はまた、YarnIt の推薦・ディスカバリーシステムを題材に、個人情報を用いないグローバル予測(「Xを買った人はYも買っています」)と、個人の購買履歴を用いたパーソナライズされた予測との間のプライバシー上のトレードオフを論じる補足コラムを含む。個人データにアクセスすることで初めて目的を達成できると判断した場合、保存時に暗号化され顧客のみが管理する鍵でロック解除されるユーザーごとのデータストアの構築が最も徹底したアプローチとして挙げられる(図2-5)。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 2 データマネジメント]] §2.5.2) ## 毛糸のクリック予測モデル(3章) 3章は、ユーザーが毛糸製品のリストをクリックする確率を予測する深層学習モデルを、本章の「どんなモデルにも役立つ質問集」への回答が具体化される事例として詳述する。特徴量は、商品説明テキストから生成された特徴量(毛糸の量・針のサイズ・製品の素材など、別チームが所有する専用モデルで予測)、32×32ピクセルに正規化された生の商品画像データ、以前のユーザーの検索・クリック履歴、検索クエリやナビゲーションに関連する特徴量、ページ上の商品配置に関する特徴量から成る。訓練ラベルはクリック有無の二値だが、遅延クリックの扱いや、自演クリック・競合妨害クリックへのスパムフィルタリングという実務上の複雑さを伴う。モデルはユーザーの閲覧・クリックから約12時間後にバッチ更新され、提供時は0.2〜0.3秒のレイテンシ制約下で多数のレプリカがスコアリングを行う。監視の出発点はモデルの更新頻度・予測の安定性・特徴量分布の3点であり、最悪シナリオとして無限レイテンシ・全てをゼロと予測・全ての予測が悪い・モデルが特定の製品に有利という4つの失敗モードが挙げられる。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 3 MLモデルの基礎]] §3.7) ## 追加商品推薦の特徴量とかぎ針編みステッチ分類(4章) 4章は、YarnIt のショッピングセッション中の追加商品推薦モデル(商品ページとカート確認ページの両方から呼び出される)を、特徴量の具体例を示す題材として使う。挙げられる重要な特徴量は、(1) ユーザーが商品ページを閲覧中かカート確認ページで購入手続き中か、(2) ユーザーが現在見ている商品の情報(商品名・商品写真からの情報・カテゴリ・メーカー・価格)、(3) 顧客の平均購入額や年間総購入額、(4) 編み物かかぎ針編みかという顧客の嗜好(自己申告または過去の購入・閲覧行動から推測)、(5) 顧客がいる国、の5点である。データ取り込みシステムは、提案ログと注文を結びつけられる限り、特徴量だけでなくこのモデルのラベル(顧客がそれを買ったかどうか)も同時に生成できる例として使われる。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 4 特徴量と訓練データ]] §4.1, §4.1.3.1) 同章はまた、人間が生成したラベルの具体例として、かぎ針編みの布の画像からその布を作るのに使われた縫い目(ステッチ)を予測する高度な新機能のケースを扱う。この場合、モデルが出力するクラスのセット(縫い目の種類)をまず人間が設計し、これらの縫い目を網羅した大量のかぎ針編み生地の画像に、かぎ針編みの専門家がどの縫い目で作られたかをラベル付けする必要がある。人間はこのタスクの訓練を要し、信頼できる結果を得るために複数回のラベル付けが必要になる場合がある例として挙げられる。(Source: 同 §4.3) ## 製品開発フェーズにおける登場(12章) 12章は yarnit.ai を、ML製品開発を製品開発プロセスとして論じる中心のユースケースとして用いる(§12.1)。ML の良いユースケース条件のうち「大規模パーソナライゼーション」の具体例として、3〜6ヶ月以内に数千の顧客が新しいオファーや割引を利用できると見込まれる状況が挙げられる(§12.3.1)。MVPの節(§12.3.3)では、実際のMLモデルを使わないルールベースの推薦の例として、(1) 編み物の型紙を購入したユーザーには針や関連用品に加えその編み図用の糸を薦める、(2) 秋になると新しい毛糸を毎年購入するユーザーには居住地域に応じて秋に毛糸を薦める、(3) いつもクレジットカードで支払うユーザーには次回からそれをデフォルトの決済オプションとして表示する、という3つのルールが挙げられている。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 12 製品とMLの関わり方]] §12.1, §12.3.1, §12.3.3) ## 推薦機能の事例集(12章 §12.5) 12章 §12.5 は、yarnit.ai ストアの推薦機能を題材に、複数の推薦手法を具体的に紹介する。 - **人気の毛糸を総売上高別に紹介(§12.5.1)**: 非パーソナライゼーション技術。ユーザーの個人的な選択ではなく、購入された毛糸・型紙の数、閲覧時間、国や地域での閲覧数・購入数といった集団的な嗜好に基づいてホームページに表示する。アカウント履歴のない初めてのユーザーをターゲットにできる(コールドスタート問題への対処)という利点があり、MLよりも一般的で信頼性の高い実績あるデータベース技術のみに頼れる。 - **閲覧履歴に基づく推薦(§12.5.2)**: ユーザーが既に閲覧した商品に基づいて新しい商品を提案する。例えば「ウール毛糸」を検索・閲覧したユーザーには、ウールベースの毛糸や柄を専門に作る人気ブランドの商品を表示する。 - **クロスセルとアップセル(§12.5.3)**: 顧客が「ベビー糸」を商品ページで探している場合に「この糸を使用した型紙」や「この糸を使用した人気のベビー服」を表示するなど、平均注文額の増加と顧客の時間節約を同時に狙う。 - **コンテンツによるフィルタリング(§12.5.4)**: 商品のメタデータ(ブランド・種類・色・品質評価など)の類似性を活用する。ユーザーがいつも「xyz」ブランドの「綿」タイプの「赤」と「青」の糸を購入している場合、同等の品質評価を得ている「abc」ブランドが特別セールを開催していれば、「abc」ブランドの同じ色と種類の糸を推薦する(図12-2)。メタデータの正確さが推薦品質を大きく左右する。 - **協調フィルタリング(§12.5.5)**: 全ての商品推薦手法の中で最も人気があるとされる手法。他のユーザーの行動(閲覧・購入・購入に対するポジティブな評価)のみに依存し、過去に似た嗜好を持った人々は将来も同じものを好むという考え方に基づく。ユーザーAとユーザーBの閲覧・購入履歴や商品の感想のペルソナが似ている場合、ユーザーBが「毛布の毛糸」の商品詳細ページにいるとき、同じ「毛布の毛糸」と一緒にユーザーAが購入した「マーカー」や「針」などの道具・アクセサリーを表示できる(図12-3)。 主要なオンラインショップの多くは協調フィルタリングとコンテンツベースのフィルタリングを併用してパーソナライズされた推薦の精度を高め、それぞれの手法を「このアルゴリズムはエンゲージメントやコンバージョンをx%改善する」という仮説から始めるA/Bテストで検証する。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 12 製品とMLの関わり方]] §12.5〜§12.5.5, 図12-2, 図12-3) ## 障害管理の事例(11章) 11章 §11.4 は YarnIt を舞台に 3 つの機能停止事例を時系列で描く。いずれも本章末尾(§11.5)の ML 障害管理の原則を導く題材として使われる。 - **事例1: 検索ランキングモデルの訓練停止(§11.4.1)**: 検索システムの信頼性を担当する運用エンジニアの Ariel は、検索結果上位5件のクリック率が12週間前から3週間前までは約62%で安定していたのが、直近では54%まで低下していることに気づく。調査の結果、検索モデル訓練システムのログフィーダープロセスがメモリ不足で数分ごとにクラッシュを繰り返し、3週間にわたり検索ランキングモデルの再訓練が完了していなかったことが判明する。ログフィーダープロセス数を10から20に増やすことでクラッシュが解消し、訓練が完了して新しい訓練済みモデルが運用に載ると機能停止は軽減されると同時に解決した。 - **事例2: パートナーキー変更によるデータ結合破損(§11.4.2)**: YarnIt はマーケットプレイス形態で多数のパートナー企業(CrochetStuff 社など)の商品も推薦しており、パートナーごとに個別のモデルを訓練する。運用エンジニアの Sam は、パートナーのコンバージョン数がゼロと報告されているのに会計システムでは毎日売上があるという不一致に気づく。原因は、データ管理チームが他プロジェクトのために一意のパートナーキーを変更したことで、新しく抽出されたログと既存データのマージが2週間前から一貫して失敗し続けていたことだった。Sam は2週間前の訓練済みモデルへ全パートナーモデルをロールバックして機能を軽減し、全パートナーデータの再抽出・全モデルの再訓練(推定72時間)で最終的に解決した。この事例の脚注は、ML システムには復旧時間目標(RTO)はあるが復旧時点目標(RPO)という概念が本質的に存在しないと指摘する。 - **事例3: 天候変化とサプライヤー喪失による「奇妙な推薦」(§11.4.3)**: 推薦件数の期待値/観測値比が数週間かけて約40%まで悪化したのち回復する経過が観測された(図11-1)。詳細は [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 11 障害対応]] を参照。 (Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 11 障害対応]] §11.4.1〜§11.4.3) ## 組織統合の事例(13章) 13章は、CEO が数年前から検討してきた ML 活用アイデア(検索結果の推薦強化、フロントページでの新製品発見の促進、在庫管理、収益性向上)を、タイムスケールと組織介入レベルが異なる例として YarnIt を用いる。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 13 MLの組織への統合]] §13.1.5) - **例1: カシミヤ糸の在庫枯渇連鎖**: 売上不振の製品を特定し推薦するモデルが、マージンや在庫を表す特徴量を持たなかったため希少なカシミヤウール糸に着目し、在庫を全て売り切ってしまう。糸の補充には数週間〜数ヶ月かかり、他サイトへの顧客流出も招いて他製品の売上も失う結果となった。(Source: ch.13 §13.1.3) - **例2: ブラウザ情報の詳細化によるプライバシー違反**: 推薦・検出チームが User-Agent 文字列からブラウザ・プラットフォームを判別するモデルを運用する一方、ウェブデザインチームが ML 担当者と相談せずブラウザ構成の完全な情報をログに記録するよう変更した結果、モデルが個々の顧客を一意に識別できるようになり、YarnIt のプライバシーガバナンスポリシーと運営国のコンプライアンス要件に違反した。(Source: ch.13 §13.1.3) - **実装の出発点としてのカート追加確認ページ**: 実装チームは、収益に敏感な検索ランキングへ最初に着手するのではなく、カート追加確認ページに推薦製品を追加するという、既存の顧客ワークフローに干渉しない低リスクな追加から始めた。「Xを購入した人はYも購入した」モデルのクリックスルー率を検索結果のクリックスルー率と比較して測定する。(Source: ch.13 §13.3) ## 組織構造の実践例(14章) 14章は、YarnItが検討する3つの一般的な組織構造の変化(新規集中型MLチーム・分散型MLインフラと専門知識・中央集権型インフラと分散型モデリングのハイブリッド)を通じ、YarnItを組織設計シナリオの舞台として用いる。(Source: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 14 実践的なML組織の事例]] §14.1-§14.3) - **大きければ良いというわけではない(コラム、§14.1.4)**: YarnItのMLチームが、より多くの商品やより高価な商品を含む大きなショッピングカートの作成を成功指標として最適化した結果、新しい大きなカートは予想よりもはるかに高い確率で放棄されるようになった。顧客は大きなカートを作成するが、合計金額を見てひるみ決済せずカートごと放棄していた。営業部門の上級リーダーが問題視しトラブルシューティングを開始し、最終的にMLチームと協力して仮説を立てる。営業部門はカート放棄に対する許容範囲内の目標をモデル最適化に組み込み、ウェブUIチームは部分チェックアウトを検討し、プロダクトチームはカートを放棄したユーザーへの再マーケティングを検討した。単純に性能の低いモデルを即座に拒絶せず、こうした一連の課題への組織横断的な取り組みによって最終的に顧客満足度とYarnItの収益性向上につながった。(Source: ch.14 §14.1.4) ## 関連 - 書籍: [[信頼性の高い機械学習]] - 概念: [[MLライフサイクル]] / [[MLモデルの脆弱性の所在]] / [[MLモデル監視]] / [[データの段階]] / [[データの保守性]] / [[特徴量ストア]] / [[クラウドソーシングによるアノテーション]] / [[ML製品開発フェーズ]] / [[アジャイルML]] / [[ML障害管理の原則]] / [[組織設計のスターモデル]] / [[SRE組織変革]] - 章: [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 1 はじめに]] / [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 2 データマネジメント]] / [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 3 MLモデルの基礎]] / [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 4 特徴量と訓練データ]] / [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 11 障害対応]] / [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 12 製品とMLの関わり方]] / [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 13 MLの組織への統合]] / [[@2024__OReillyJapan__信頼性の高い機械学習 - Chapter 14 実践的なML組織の事例]] ## 出典 - Cathy Chen ほか, 『信頼性の高い機械学習 ―SRE 原則を活用した MLOps』, オライリー・ジャパン, 2024, 1 章, 2 章 §2.2, §2.5.2, 3 章 §3.7, 4 章 §4.1, §4.1.3.1, §4.3, 11章 §11.4.1〜§11.4.3, 12章 §12.1, §12.3.1, §12.3.3, §12.5〜§12.5.5, 13章 §13.1.3, §13.1.5, §13.3, 14章 §14.1.4.