機械学習を使用して Airbnb のリスティングの価格を予測する

機械学習を使用して Airbnb のリスティングの価格を予測する

[[202603]]

ギリシャ、エーゲ海、イメロヴィグリの Airbnb の美しい景色

導入

データ プロダクトは常に Airbnb のサービスの重要な部分を占めてきましたが、データ プロダクトの開発コストが非常に高いことに私たちは早い段階で気付きました。たとえば、パーソナライズされた検索並べ替えにより、顧客は好みの住宅を見つけやすくなり、スマートな価格設定により家主はより競争力のある価格を設定できます。しかし、これらの製品を作成するには、多くのデータ サイエンティストやエンジニアの多大な時間と労力がかかります。

最近、Airbnb は機械学習インフラストラクチャを改善し、新しい機械学習モデルを本番環境に導入するコストを大幅に削減しました。たとえば、当社の ML インフラ チームは、ユーザーがより高品質で選別された再利用可能な機能をモデルに適用できるようにする共通の機能ライブラリを構築しました。データ サイエンティストは、モデルの選択を高速化し、パフォーマンス基準を向上させるために、自動化された機械学習ツールをワークフローに組み込み始めています。さらに、ML Infra は、Jupyter ノートブックを Airflow パイプラインで受け入れられる形式に自動的に変換する新しいフレームワークを作成しました。

この記事では、これらのツールがどのように連携してモデル構築を高速化し、LTV モデル(Airbnb の住宅価格を予測するためのモデル)の開発にかかる全体的なコストを削減するかについて説明します。

LTVとは何ですか?

LTV は Customer Lifetime Value の略で、「顧客生涯価値」を意味します。これは、e コマースやマーケティング企業で非常に人気がある概念です。これは、ユーザーが将来の一定期間に会社にもたらすと予想される収益を、通常は米ドルで定義します。

Spotify や Netflix などの一部の e コマース企業では、LTV は製品の価格設定 (サブスクリプション料金など) を決定するためによく使用されます。 Airbnb のようなマーケットプレイス企業では、ユーザーの LTV を把握することで、マーケティング チャネル間で予算をより効果的に配分したり、キーワードに基づいてオンライン マーケティングの見積もりをより明確に作成したり、カテゴリのセグメンテーションを改善したりできるようになります。

過去のデータをもとに履歴値を計算したり、もちろんさらに機械学習を使って新規登録住宅のLTVを予測したりすることも可能です。

LTV モデルの機械学習ワークフロー

データ サイエンティストは通常​​、特徴エンジニアリング、プロトタイピング、モデル選択などの機械学習タスクに精通しています。ただし、モデルのプロトタイプを本番環境に導入するには、ユーザーがあまり馴染みのないさまざまなデータ エンジニアリング手法が必要になります。

幸いなことに、特定の本番展開ワークフローを機械学習モデルの分析と確立から分離できる適切な機械学習ツールがあります。これらの素晴らしいツールがなければ、モデルを簡単に生産に移すことはできません。次の 4 つのトピックでは、ワークフローと各トピックで使用されるツールを紹介します。

  • 特徴エンジニアリング: 関連する特徴の定義
  • プロトタイピングとトレーニング: モデルプロトタイプをトレーニングする
  • モデルの選択と検証: モデルの選択とパラメータの調整
  • 本番環境への展開: 選択したモデルのプロトタイプを本番環境に導入する

機能エンジニアリング

使用ツール: Airbnb 内部機能ライブラリ — Zipline

あらゆる教師あり学習プロジェクトの最初のステップは、結果に影響を与える関連する特徴を見つけることであり、これは特徴エンジニアリングと呼ばれるプロセスです。たとえば、LTV を予測する場合、特徴としては、今後 180 日間にリストが利用可能になる日数の割合が考えられます。また、同じ市場の他のリストと比較した価格の差が考えられます。

Airbnb では、機能エンジニアリングでは通常、機能を作成するために Hive クエリをゼロから記述します。しかし、この仕事は非常に退屈で、時間がかかります。特定のドメイン知識とビジネス ロジックが必要となるため、これらの機能パイプラインは共有や再利用が容易ではありません。この作業をよりスケーラブルにするために、トレーニング済みの機能のライブラリである Zipline を開発しました。さまざまな粒度レベル(住宅所有者、顧客、リスト、市場レベルなど)で機能を提供できます。

この社内ツールの「マルチソース共有」機能により、データ サイエンティストは過去のプロジェクトから、高品質で検証済みの機能を多数見つけることができます。必要な機能が見つからない場合は、ユーザーは構成ファイルを作成して必要な機能を作成することもできます。

  1. ソース: {
  2. タイプ: ハイブ
  3. クエリ: "" "
  4. 選択 
  5. id_listing をリストとして
  6. 、dim_city をcityとする
  7. 、dim_countryをとして
  8. 、dim_is_active をis_activeとして
  9. , CONCAT(ds, ' 23:59:59.999' )tsとして
  10. から 
  11. コアデータ.dim_listings
  12. どこ 
  13. ds  '{{ 開始日 }}'  そして  '{{終了日}}'  
  14. 「」 「
  15. 依存関係: [core_data.dim_listings]
  16. is_snapshot: 
  17. 開始日: 2010-01-01
  18. }
  19. 特徴:
  20. city: 「リストが所在する都市」  
  21. country: 「リストが所在する国」  
  22. is_active: 「リストが日付パーティションの時点でアクティブであるかどうか。」  
  23. }

トレーニング セットを構築する際、Zipline はトレーニング セットに必要な機能を見つけ、キーに従って機能を自動的にグループ化し、データを入力します。リスティング LTV モデルを構築する際、Zipline の既存の機能の一部を使用し、独自の機能もいくつか作成しました。このモデルでは、以下を含む合計 150 を超える機能が使用されます。

  • 場所: 国、市場、コミュニティ、その他の地理的特徴
  • 料金: 宿泊料金、清掃料金、類似物件との価格差
  • 空室状況: 宿泊可能な宿泊日数の合計と、ホストが手動で閉鎖した宿泊日数の割合
  • 空室状況: 過去X日間の予約数と1泊あたりの予約数
  • 品質: レビュースコア、レビュー数、アメニティ

データセットの例

特徴と出力変数を定義した後、履歴データに基づいてモデルをトレーニングできます。

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

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

前のトレーニング セットを例にとると、トレーニングの前にデータを前処理する必要があります。

  • データ補完: 欠損データがあるかどうか、またそれがランダムに欠損しているかどうかを確認する必要があります。それがランダムな現象でない場合は、その根本原因を解明する必要があります。ランダムに欠落している場合は、欠落したデータを補う必要があります。
  • カテゴリのエンコード: 一般的に、モデルは文字列に適合できないため、元のカテゴリをモデル内で直接使用することはできません。カテゴリの数が比較的少ない場合は、エンコードにワンホットエンコーディングを使用することを検討できます。カテゴリの数が多い場合は、カテゴリの頻度に応じてエンコードする順序エンコードの使用を検討します。

この段階では、最も効果的な機能セットが何であるかはまだわからないため、迅速に反復できるコードを記述することが非常に重要です。 Scikit-Learn や Spark などのオープンソース ツールのパイプライン構造は、プロトタイピングに非常に便利なツールです。パイプラインを使用すると、データ サイエンティストは、特徴を変換する方法とトレーニングするモデルを指定するブループリントを設計できます。具体的には、LTV モデルのパイプラインは次のとおりです。

  1. 変換 = []
  2.  
  3. 変換.append(
  4. ( 'select_binary' 、 ColumnSelector(features= binary ))
  5.  
  6. 変換.append(
  7. ( '数値' , ExtendedPipeline([
  8. ( 'select' 、 ColumnSelector(features= numeric ))、
  9. ( 'impute' 、Imputer(missing_values= 'NaN' 、strategy= 'mean' 、axis=0))、
  10. ]))
  11.  
  12. カテゴリフィールド:
  13. 変換.append(
  14. (フィールド、ExtendedPipeline([
  15. ( 'select' 、 ColumnSelector(features=[field]))、
  16. ( 'encode' 、OrdinalEncoder(min_support=10))
  17. ])
  18.  
  19. 特徴 = FeatureUnion(変換)

大まかに言えば、パイプラインを使用して、特徴タイプ (バイナリ特徴、カテゴリ特徴、数値特徴など) に基づいて、さまざまな特徴のデータをどのように変換するかを指定します。 ***FeatureUnion を使用して、特徴列を単純に結合し、最終的なトレーニング セットを形成します。

プロトタイピングにパイプラインを使用する利点は、データ変換を使用して面倒なデータ変換を回避できることです。全体として、これらの変換は、プロトタイプを本番環境に展開するときにデータの不整合を回避するために、トレーニングと評価中にデータの一貫性が維持されるようにすることを目的としています。

さらに、パイプラインはデータ変換プロセスとモデルトレーニングプロセスを分離できます。上記のコードには示されていませんが、データ サイエンティストは最後のステップで推定値を指定してモデルをトレーニングできます。さまざまな推定値を試すことで、データ サイエンティストはモデルに最適な推定値を選択し、モデルのサンプル エラーを削減できます。

モデルの選択と検証

使用ツール: さまざまな自動機械学習フレームワーク

前のセクションで述べたように、候補モデルのどれが生産に最適かを決定する必要があります。この決定を行うには、モデルの解釈可能性と複雑さのバランスを取る必要があります。たとえば、スパース線形モデルは解釈が容易ですが、複雑性が低すぎるため、うまく機能しません。十分に複雑なツリー モデルはさまざまな非線形パターンに適合できますが、その解釈可能性は低くなります。この状況は、バイアスと分散のトレードオフとも呼ばれます。

上記の図は、James、Witten、Hastie、Tibshirani著「Rによる統計学習」から引用したものです。

保険や信用審査などのアプリケーションでは、モデルを説明する必要があります。モデルが誤って一部の正しい顧客を除外することを回避することが重要だからです。ただし、画像分類などのアプリケーションでは、解釈可能性よりもモデルの高いパフォーマンスの方が重要です。

モデルの選択には非常に時間がかかるため、このステップを高速化するためにさまざまな自動機械学習ツールを使用することを選択しました。多数のモデルを調査することで、最終的に最もパフォーマンスの高いモデルが見つかります。たとえば、XGBoost (XGBoost) は、他のベースライン モデル (平均応答モデル、リッジ回帰モデル、単一決定木など) よりも大幅に優れていることがわかりました。

上: RMSEを比較することで、より優れたパフォーマンスを持つモデルを選択できます

当初の目標は上場価格を予測することだったので、最終的な本番環境では、解釈可能性よりもモデルの回復力に重点を置き、XGBoost モデルを安心して使用できました。

実稼働環境への導入

使用ツール: Airbnb 独自のノートブック変換フレームワーク — ML Automator

冒頭で述べたように、制作ワークフローを構築することは、ラップトップでプロトタイプを構築することとはまったく異なります。たとえば、定期的な再トレーニングをどのように実行するか、多数のインスタンスを効率的に評価するにはどうすればよいか、モデルのパフォーマンスを長期にわたって監視するためのパイプラインをどのように構築すればよいかなどです。

Airbnb では、Jupyter ノートブックを Airflow 機械学習パイプラインに自動的に変換する ML Automator という独自のフレームワークを開発しました。このフレームワークは、Python でプロトタイプを開発することに慣れているものの、モデルを本番環境に導入する経験がないデータ サイエンティスト向けに設計されています。

ML Automator フレームワークの概要 (写真提供: Aaron Keys)

まず、フレームワークでは、ユーザーがノートブック内のモデルの構成を指定する必要があります。この構成は、トレーニング データ テーブルの検索方法、トレーニングに割り当てるコンピューティング リソースの量、およびモデル評価スコアの計算方法をフレームワークに指示します。

さらに、データ サイエンティストは独自の適合関数と変換関数を記述する必要があります。 fit 関数はトレーニングの実行方法を指定しますが、transform 関数は分散コンピューティング用に Python UDF によってカプセル化されます (必要な場合)。

次のコード スニペットは、LTV モデルの適合関数と変換関数を示しています。 fit 関数はフレームワークに XGBoost モデルをトレーニングする必要があることを伝え、トランスフォーマーは先ほど定義したパイプラインに従ってデータを変換します。

  1. def fit(X_train, y_train):
  2. マルチプロセッシングをインポートする
  3. ml_helpers.sklearn_extensionsからDenseMatrixConverter をインポートします
  4. ml_helpers.dataからsplit_recordsをインポート
  5. xgboostからXGBRegressor をインポートする
  6.  
  7. グローバルモデル
  8.  
  9. モデル = {}
  10. n_subset = N_EXAMPLES
  11. X_subset = {k: v[:n_subset] 、k、vの場合、X_train.iteritems()}
  12. model[ '変換' ] = ExtendedPipeline([
  13. ( '機能' 、機能)、
  14. ( 'densify' 、 DenseMatrixConverter())、
  15. ]).fit(X_subset)
  16.  
  17. コンバータを並列で使用する
  18. Xt = モデル[ '変換' ].transform_parallel(X_train)
  19.  
  20. # モデルのフィッティングを並列で実行する
  21. モデル[ 'regressor' ] = XGBRegressor().fit(Xt, y_train)
  22.  
  23. def transform(X):
  24. #辞書を返す
  25. グローバルモデル
  26. Xt = モデル[ '変換' ].transform(X)
  27. 戻り値: { 'スコア' :モデル[ '回帰係数' ].予測(Xt)}

ノートブックが完了すると、ML Automator はトレーニング済みのモデルを Python UDF でラップし、以下に示すように Airflow パイプラインを作成します。データのシリアル化、定期的な再トレーニング、分散評価などのデータ エンジニアリング タスクはすべて、毎日のバッチ処理ジョブにロードされます。その結果、このフレームワークにより、データ サイエンティストがモデルを運用環境に導入するためのコストが大幅に削減され、まるでデータ エンジニアがサイエンティストと一緒に作業しているかのように作業できるようになります。

Airflow DAG の LTV モデルのグラフィカル インターフェース (本番環境で実行中)

注: モデルの製品化に加えて、この投稿では取り上げなかった他のプロジェクト (時間の経過に伴うモデル パフォーマンスの追跡、柔軟なコンピューティング環境によるモデリングなど) もあります。これらはすべて、開発が進行中の注目分野です。

経験と展望

当社のデータ サイエンティストは、過去数か月間 ML Infra と緊密に連携し、多くの優れたモデルとアイデアを生み出してきました。これらのツールは、Airbnb での機械学習モデルの開発に新たなパラダイムをもたらすと信じています。

  • まず、モデル開発のコストが大幅に削減されます。さまざまな独立したツール(特徴エンジニアリング用の Zipline、モデルプロトタイピング用の Pipeline、モデルの選択と検証用の AutoML、モデル制作用の最新の ML Automator)の利点を組み合わせることで、モデル開発サイクルを大幅に短縮しました。
  • 2 番目に、ノートブックの設計により参入障壁が低くなり、フレームワークにまだ慣れていないデータ サイエンティストでも、すぐに実際の使用例を多数把握できるようになります。運用環境では、ノートブックが正しく、わかりやすく、安全であることを確認できます。このデザインパターンは新しいユーザーに好評を博しています。
  • したがって、チームは機械学習製品のアイデアにもっと積極的に取り組むようになります。この記事を書いている時点では、リストをチェックするためのキューをソートする、リストがパートナーを増やすかどうかを予測する、低品質のリストを自動的にマークするなど、同様の方法を使用して機械学習製品のアイデアを検討しているチームが他にもいくつかあります。

私たちはこのフレームワークの将来とそれがもたらす新しいパラダイムに非常に興奮しています。プロトタイピング環境と本番環境のギャップを埋めることで、データ サイエンティストとデータ エンジニアがより多くのエンドツーエンドの機械学習プロジェクトに取り組むことができるようになり、製品の改善につながります。

<<:  JD.comの鄭志同氏:機械学習を使って何億もの商品データを最適化する方法

>>:  機械学習をマスターするのに役立つ13のフレームワーク

ブログ    
ブログ    

推薦する

初期の携帯電話で使用されていたGPRS暗号化アルゴリズムが意図的に弱められていたことが明らかになった。

[[406364]]ヨーロッパの複数の大学の研究者チームが論文の中で、初期の携帯電話で使用されてい...

人工知能はセキュリティの優れた防御線である

2021年を迎え、私たちは新しい働き方や新しい労働環境に慣れてきました。多くの人は、デジタル通信手段...

...

北京大学の学部生がチップ研究で世界大会で優勝!筆頭著者はトップクラスのEDAカンファレンスで8本の論文を発表

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

...

ジェネレーティブAIは高度な分析に新たな可能性をもたらす

過去 2 年間で、生成型人工知能 (GenAI) の出現により、産業プロセス分析に刺激的な新しい可能...

...

リカレントニューラルネットワークの分析を深く理解する

[[211637]]リカレント ニューラル ネットワーク (RNN) は、レイヤー内に重み付けされた...

...

...

...

AIの未来: 次世代の生成モデルの探究

ニシャ・アーヤ著翻訳者 | ブガッティレビュー | Chonglou生成 AI には現在どのような機...

企業内で AI 分析を導入し拡張する方法

[[415863]]多くの組織の AI 分析に対する要望と、組織の規模や能力との間のギャップは拡大し...