機械学習を使用してAirbnbの家の価値を予測する

ロバート・チャン

イメロヴィグリ、エジオ、ギリシャのAirbnbホームからのすばらしい眺め

前書き

データ製品は常にAirbnbのサービスの重要な部分を占めてきました。ただし、データ製品の作成にはコストがかかることを長い間認識しています。たとえば、パーソナライズされた検索ランキングにより、ゲストはより簡単に家を見つけることができ、スマート価格設定により、ホストは需要と供給に応じてより競争力のある価格を設定できます。ただし、これらのプロジェクトはそれぞれ、多くの専用のデータサイエンスおよびエンジニアリングの時間と労力を必要としました。

最近、Airbnbの機械学習インフラストラクチャの進歩により、新しい機械学習モデルを運用環境に展開するためのコストが大幅に削減されました。たとえば、当社のML Infraチームは、ユーザーがモデルで高品質で吟味された再利用可能な機能を活用できるようにする一般的な機能リポジトリを構築しました。データサイエンティストは、いくつかのAutoMLツールをワークフローに組み込み、モデル選択とパフォーマンスベンチマークを高速化し始めました。さらに、ML infraはJupyterノートブックをAirflowパイプラインに自動的に変換する新しいフレームワークを作成しました。

この投稿では、これらのツールがどのように連携してモデリングプロセスを促進し、LTVモデリングの特定のユースケースの全体的な開発コストを削減するか、つまりAirbnbの住宅の価値を予測する方法について説明します。

LTVとは?

eコマースおよびマーケットプレイス企業の間で人気のある概念であるCustomer Lifetime Value(LTV)は、多くの場合ドル単位で測定される一定期間のユーザーの予測値をキャプチャします。

SpotifyやNetflixなどの電子商取引会社では、LTVを使用して、サブスクリプション料金の設定などの価格決定を行うことがよくあります。 Airbnbなどの市場企業では、ユーザーのLTVを知っているため、さまざまなマーケティングチャネルに予算をより効率的に割り当て、キーワードに基づいてオンラインマーケティングのより正確な入札価格を計算し、より良いリスティングセグメントを作成できます。

過去のデータを使用して既存のリストの履歴値を計算できますが、機械学習を使用して新しいリストのLTVを予測するためにさらに一歩進んでいます。

LTVモデリングの機械学習ワークフロー

データサイエンティストは通常​​、フィーチャエンジニアリング、プロトタイピング、モデル選択などの機械学習関連のタスクに慣れています。ただし、モデルプロトタイプを実稼働環境に持ち込むには、多くの場合、データサイエンティストがなじみのないデータエンジニアリングスキルの直交セットが必要です。

幸いなことに、Airbnbには、MLモデルの生産の背後にあるエンジニアリング作業を抽象化する機械学習ツールがあります。実際、これらの素晴らしいツールがなければ、モデルを生産に移すことはできませんでした。この投稿の残りの部分は、各タスクに取り組むために使用したツールとともに、4つのトピックで構成されています。

  • 機能エンジニアリング:関連機能を定義する
  • プロトタイプ作成とトレーニング:モデルプロトタイプのトレーニング
  • モデルの選択と検証:モデルの選択と調整を実行します
  • 生産化:選択したモデルプロトタイプを生産に持ち込む

機能エンジニアリング

使用ツール:Airbnbの内部機能リポジトリ— Zipline

教師あり機械学習プロジェクトの最初のステップの1つは、選択した結果変数と相関する関連機能を定義することです。これは機能エンジニアリングと呼ばれるプロセスです。たとえば、LTVの予測では、リスティングが利用できる次の180暦日の割合、または同じ市場の同等のリスティングに対するリスティングの価格を計算できます。

Airbnbでは、機能エンジニアリングとは、多くの場合、Hiveクエリを記述して機能をゼロから作成することを意味します。ただし、この作業は特定のドメインの知識とビジネスロジックを必要とするため、面倒で時間がかかります。つまり、機能パイプラインは簡単に共有したり、再利用したりすることはできません。この作業をよりスケーラブルにするために、Ziplineを開発しました。これは、ホスト、ゲスト、リスト、市場レベルなど、さまざまな粒度の機能を提供するトレーニング機能リポジトリです。

この内部ツールのクラウドソース化された性質により、データサイエンティストは、他の人が過去のプロジェクトのために準備した多種多様な高品質で吟味された機能を使用できます。目的の機能が使用できない場合、ユーザーは次のような機能構成ファイルを使用して独自の機能を作成できます。

トレーニングセットの構築に複数の機能が必要な場合、Ziplineはインテリジェントキー結合を自動的に実行し、バックグラウンドでトレーニングデータセットを埋め戻します。リストのLTVモデルでは、既存のZipline機能を使用し、独自の機能も追加しました。まとめると、モデルには次のような150以上の機能がありました。

  • 場所:国、市場、近所、さまざまな地理的特徴
  • 価格:毎晩の料金、清掃料金、同様のリストと比較した価格
  • 可用性:利用可能な総夜、手動でブロックされた夜の割合
  • 予約可能性:過去X日間に予約された予約または宿泊数
  • 品質:レビューのスコア、レビューの数、およびアメニティ
トレーニングデータセットの例

定義された機能と結果変数を使用して、履歴データから学習するモデルをトレーニングできます。

プロトタイピングとトレーニング

使用ツール:Pythonの機械学習ライブラリ— scikit-learn

上記のトレーニングデータセットの例のように、モデルを近似する前に追加のデータ処理を実行する必要があることがよくあります。

  • データの代入:データが欠落しているかどうか、およびそのデータがランダムに欠落しているかどうかを確認する必要があります。そうでない場合、理由を調査し、根本原因を理解する必要があります。はいの場合、欠損値を補完する必要があります。
  • カテゴリ変数のエンコード:多くの場合、モデルは文字列に適合する方法を知らないため、モデルで生のカテゴリを使用できません。カテゴリの数が少ない場合、ワンホットエンコーディングの使用を検討できます。ただし、カーディナリティが高い場合は、各カテゴリの頻度カウントによるエンコードの順序エンコードを使用することを検討できます。

このステップでは、どの機能を使用するのが最適かを十分に把握していないため、すばやく反復できるコードを記述することが不可欠です。 Scikit-LearnやSparkなどのオープンソースツールで一般的に利用可能なパイプラインコンストラクトは、プロトタイピングに非常に便利なツールです。パイプラインにより、データサイエンティストは、フィーチャの変換方法とトレーニングするモデルを記述する高レベルの設計図を指定できます。より具体的にするために、以下にLTVモデルパイプラインのコードスニペットを示します。

高いレベルでは、パイプラインを使用して、さまざまなタイプの機能のデータ変換を指定します。これらの機能は、それらの機能がバイナリ、カテゴリ、または数値のいずれであるかによって異なります。最後のFeatureUnionは、機能を列ごとに組み合わせて最終的なトレーニングデータセットを作成するだけです。

パイプラインを使用してプロトタイプを作成する利点は、データ変換を使用して面倒なデータ変換を抽象化することです。まとめて、これらの変換により、トレーニングとスコアリングの間でデータが一貫して変換されることが保証され、プロトタイプを実動に変換する際のデータ変換の不整合の一般的な問題が解決されます。

さらに、パイプラインはデータ変換とモデルフィッティングを分離します。上記のコードには示されていませんが、データサイエンティストはモデルフィッティングの推定量を指定する最終ステップを追加できます。データサイエンティストは、さまざまな推定量を調査することにより、モデルの選択を実行して、最適なモデルを選択し、モデルのサンプルエラーを改善できます。

モデル選択の実行

使用ツール:さまざまなAutoMLフレームワーク

前のセクションで述べたように、どの候補モデルが実稼働に最適であるかを決定する必要があります。このような決定を行うには、モデルの解釈可能性とモデルの複雑さのトレードオフを比較検討する必要があります。たとえば、まばらな線形モデルは非常に解釈可能ですが、十分に一般化するには複雑ではありません。ツリーベースのモデルは、非線形パターンをキャプチャするのに十分な柔軟性があるかもしれませんが、あまり解釈できません。これは、バイアスと分散のトレードオフとして知られています。

James、Witten、Hastie、およびTibshiraniによるRによる統計学習の概要から参照されている図

保険や信用審査などのアプリケーションでは、モデルが特定の顧客を誤って差別しないようにすることが重要であるため、モデルは解釈可能である必要があります。ただし、画像分類などのアプリケーションでは、解釈可能なモデルよりもパフォーマンスの高い分類器を使用することがはるかに重要です。

モデルの選択には非常に時間がかかるため、さまざまなAutoMLツールを使用してプロセスを高速化することを試みました。さまざまなモデルを調査することで、どのタイプのモデルが最もパフォーマンスが高い傾向があるかがわかりました。たとえば、eXtreme勾配ブーストツリー(XGBoost)は、平均応答モデル、リッジ回帰モデル、単一決定ツリーなどのベンチマークモデルを大幅に上回ることがわかりました。

RMSEを比較すると、モデルの選択を実行できます

リストの値を予測することが主な目標であるため、解釈可能性よりも柔軟性を優先するXGBoostを使用して最終モデルを快適に生産できると感じました。

モデルプロトタイプを本番環境に

使用ツール:Airbnbのノートブック翻訳フレームワーク— ML Automator

前にほのめかしたように、生産パイプラインの構築は、ローカルラップトップでのプロトタイプの構築とはまったく異なります。たとえば、どのように定期的な再トレーニングを実行できますか?多数のサンプルを効率的に採点するにはどうすればよいですか?長期にわたってモデルのパフォーマンスを監視するパイプラインを構築するにはどうすればよいですか?

Airbnbでは、JupyterノートブックをAirflow機械学習パイプラインに自動的に変換するML Automatorと呼ばれるフレームワークを構築しました。このフレームワークは、Pythonでのプロトタイプの作成にすでに慣れているデータサイエンティスト向けに設計されており、データエンジニアリングの経験が限られているモデルを本番環境に持ち込みたいと考えています。

ML Automator Frameworkの簡略化された概要(写真提供:Aaron Keys)
  • まず、フレームワークでは、ユーザーがノートブックでモデル構成を指定する必要があります。このモデル構成の目的は、トレーニングテーブルの場所、トレーニングに割り当てる計算リソースの数、およびスコアの計算方法をフレームワークに伝えることです。
  • さらに、データサイエンティストは、特定の適合関数と変換関数を記述する必要があります。 fit関数は、トレーニングが正確に行われる方法を指定し、変換関数は、分散スコアリング用のPython UDFとしてラップされます(必要な場合)。

LTVモデルで近似関数と変換関数がどのように定義されるかを示すコードスニペットがあります。 fit関数は、XGBoostモデルがトレーニングされ、以前に定義したパイプラインに従ってデータ変換が実行されることをフレームワークに伝えます。

ノートブックがマージされると、ML Automatorは訓練されたモデルをPython UDF内にラップし、以下のようなAirflowパイプラインを作成します。データのシリアル化、定期的な再トレーニングのスケジューリング、分散スコアリングなどのデータエンジニアリングタスクはすべて、この毎日のバッチジョブの一部としてカプセル化されます。結果として、このフレームワークは、データサイエンティストのモデル開発のコストを大幅に削減します。まるで、データサイエンティストと一緒に働いてモデルを生産に移す専用のデータエンジニアがいるかのようです。

稼働中のLTVエアフローDAGのグラフビュー

注:生産化以外にも、時間の経過に伴うモデルパフォーマンスの追跡や、モデリングのためのエラスティックコンピューティング環境の活用など、他のトピックがありますが、この記事では取り上げません。これらはすべて開発中のアクティブな領域です。

教訓と今後の展望

過去数か月間、データサイエンティストはML Infraと非常に緊密に提携しており、このコラボレーションから多くの優れたパターンとアイデアが生まれました。実際、これらのツールは、Airbnbで機械学習モデルを開発する方法の新しいパラダイムのロックを解除すると考えています。

  • まず、モデル開発のコストが大幅に低くなります:個々のツールの異なる強みを組み合わせることにより:機能エンジニアリング用のZipline、モデルプロトタイプ用のPipeline、モデル選択とベンチマーク用のAutoML、そして最終的に生産化用のML Automatorにより、開発サイクルが大幅に短縮されました。
  • 第二に、ノートブック駆動の設計により、参入の障壁が軽減されます。フレームワークに精通していないデータサイエンティストは、実生活の多くの例にすぐにアクセスできます。本番環境で使用されるノートブックは、正確で、自己文書化され、最新のものであることが保証されています。この設計は、新規ユーザーからの強力な採用を促進します。
  • その結果、チームはML製品のアイデアに投資する意欲が高まりました:この投稿の執筆時点で、他のチームが同様のアプローチに従ってML製品のアイデアを検討しています:共同ホストを追加し、低品質のリストのフラグ設定を自動化します。

このフレームワークの未来と、それがもたらした新しいパラダイムに非常に興奮しています。プロトタイピングと生産化の間のギャップを埋めることにより、データサイエンティストとエンジニアがエンドツーエンドの機械学習プロジェクトを追求し、製品を改善できるようになります。

これらのMLツールを使用または構築したいですか?データサイエンスおよび分析チームに参加する優秀な人材を常に募集しています。

この仕事に携わったData Science&ML Infraチームのメンバーに特に感謝します:Aaron Keys、Brad Hunter、Hamel Husain、Jiaying Shi、Krishna Puttaswamy、Michael Musson、Nick Handel、Varant Zanoyan、Vaughn Quossなどこのブログ投稿をレビューしてくれたGary Tang、Jason Goodman、Jeff Feng、Lindsay Pettingillに感謝します。