Skip to main content
Customized Regression Model for Airbnb Dynamic Pricing考察

論文『Customized Regression Model for Airbnb Dynamic Pricing』ダイナミックプライシング考察

Miyamoto Shuhei


[引用論文] Customized Regression Model for Airbnb Dynamic Pricing
https://www.kdd.org/kdd2018/accepted-papers/view/customized-regression-model-for-airbnb-dynamic-pricing
Peng Ye (Airbnb); Julian Qian (Ant financial); Jieying Chen (Airbnb); Chen-Hung Wu (Airbnb); Yitong Zhou (Airbnb); Spencer De Mars (Airbnb); Frank Yang (Airbnb); Li Zhang (Airbnb)

Airbnbとは

  • 「宿版メルカリ」
  • マッチング円滑化が運営の利益に直結
  • 値段しか設定できない
    • 運営としては最適な値段を提案したい
    • 最適な値段を推定し提案するモデルを作りたい

2ステップ

データサイエンスとしての領域は大きく分けて2段階

Booking Probability model

3種類(合計数十個)の特徴量から、予約確率を勾配ブースティングの回帰モデルで推定する需要曲線の構成に必要。

Strategy model

上で求めた予約確率を用いて、最適な価格設定を提案する。

  • 「最適な値段」というのはデータからもわからない
  • 単純な教師あり学習のようにはいかない
  • 需要曲線を取り入れた複雑なモデルを必要とする

例:15000円で売れたが実際にはもっと高い値段でもよかったかもしれない

Strategy modelは物件ごとにモデルを作る。

相当モデルを軽くする必要がある。

考察

需要曲線と言うと、ミクロ経済学の一般的な教科書に載っているのは需要と値段の関係だが、ここでは需要の代わりに予約が埋まる確率を使っている。

確かに時と場合によってはこちらのほうがよさそうである。

実際にはこのあと貸し側による調整がある。

プライシングというドメイン特有の難しさ

  • 「最適な値段」というのはデータにも表れない
  • 損失関数は単純な平均二乗誤差や効用の差では駄目
  • 次の二つの状況を「悪い」と定義
    • 予約が埋まっている & 提示価格<実際の価格
    • 予約が埋まっていない & 提示価格>実際の価格

考察

RecallやPrecisionを、予約の有無ごとに計算している。

重要なのは、予約ありのRecallのPDRと、BR(\(:= median_{booking}(0,\frac{P-P_sug}{P})\),予約された日の機会損失割合)

この二つが売り上げとの相関が強い。

PDRを大きくし、BRを小さくしたい。この二つはトレードオフなので、同時に最適化をする必要がある。

損失関数の構成と

これを踏まえて、損失関数を定義

\[ \mathcal{L} (\theta) := \sum^N_{i=1} \bigl(L\bigl(P_i, y_i\bigr) -f_{\theta}\bigl(x_i\bigr)\bigr)^{+} + \bigl(f_{\theta}\bigl(x_i\bigr) – U\bigl(P_i, y_i\bigr)\bigr)^{+} \]

\(f_\theta (x_i)\):価格の提案モデル

\(x_i,y_i,P_i\):データ\(i\)の特徴量,予約状況,販売価格

※予約が埋まっていた場合\(y, = 1,\)埋まっていなかった場合\(y_i\) = 0

\[ L(P_i,y_i) := y_i P_i + (1 – y_i) c_1 P_i \]
\[ U(P_i,y_i) := (1 – y_i)P_i + c_2y_iP_i \]

\(c_1,c_2は0 < c_1 < 1 < c_2 \)を満たすハイパーパラメータ

考察

もしも\(c_1,c_2=1 or 0\)なら、損失関数を最小化するのは常に提示価格と実際の価格が一致する状況であり、「値付け人のやりかたの模倣」という意味しか持たず、人員削減にしかならないので、データサイエンスの威力を感じられない。

そこで、価格が実際の値段から乖離しすぎた場合、それは前述の「悪い」状況でなくてもペナルティを与えることにする。正則化のような意味を持っていると考えられる。

PDRを大きくするのをBRを小さくすることよりも若干重視しているためであろうか?

価格提案モデルについて

提案価格を\(P_{sug}\)と置く。

\[P_{sug} = PV \]
\[ \small{ V= \left\{ \begin{array}{c} 1+\theta_1(q^{\varphi^{-qD}_{H}} – \theta_2)\ \ \ ,D>0\\ 1+\theta_1(q^{\varphi^{-(1-q)D}_{L}} – \theta_2)\ \ \ ,D\leq0 \end{array} \right\} } \]

\(P:q:\)先述の回帰モデルで推定された、価格\(P\)に対する予約確率基準となる値段

\(D:\)需要スコア

\(\phi_L,\phi_H : \)係数、ここが\(d\)の値によって変わるのが特徴

  • 最適化アルゴリズムはSGDを用いる
  • データはここ1年のも

枠が日次変化する場合の需要予測について

ダイナミックプライシングの部屋以外のプライシング問題では、枠数が日ごとに変化する可能性がある。

例:美容院などでは、職員の人数や一人当たりの担当枠は毎日変動する。

Booking Probability modelは前述のものをそのまま使うことはできない方法は2種類考えられる。

SARSA法

枠も可変なので厳しい 。

期待値出力

詳細は次のセクション「 期待割合出力法の提案 」にて

期待割合出力法の提案

論文通りの予約枠が1つの場合

出力される予約確率=予約される数の期待値と解釈できる。

特徴量に予約枠の数を追加し、最終的にシグモイド関数なりで「予約される割合の期待値」を出力していると考える。

注意点としては、仮に予約枠が10個、出力が0.67​ならこの予約枠の埋まる数の期待値は6.7であると考えられるが入力のうち予約枠を7以上の(データ上珍しくはない)いかなる値にしても、出力×予約枠数がほぼ同じ数字になるのが望ましい。

さらに、ほかの特徴量は同じにしたまま枠だけを6以下にした場合は、1.0に近い値が出力されるのが好ましいが、そのような学習が可能なのかは今後の課題である。

例えば次のような2つの課題があるとします。

課題1

論文の2値分類とは異なる複数値分類の問題でAirbnbのモデルを適用したいとします、予約枠が複数ある。

例えば、リラクゼーション店のトレーナーが10人いて、そのうち3人に予約が入る。

予約枠の数は日時によって異なる。

トレーナーが10人の時間もあれば8人のときもある。

このとき、下記論文section2.1のestimated demandを具体的にどのように導出するか説明してください。

Customized Regression Model for Airbnb Dynamic Pricing

https://www.kdd.org/kdd2018/accepted-papers/view/customized-regression-model-for-airbnb-dynamic-pricing

考察と回答例

予約枠が複数ある、もしくは予約枠が日によって変動する場合を考慮したdemand の推定手法。

売るものが宿泊枠ではなく、一般の商品の場合は、このような事例を考える必要がでてくると思われる。

枠の数として在り得る数字すべてに十分なデータがあるなら、それを用いて個別にモデルを作るのが最も楽で確実だが、現実はそうもいかないので「全体としては十分なデータはあるものの、1 種類の枠ごとのデータは足りない」という状況を想定する。

単純な多値分類は不可

例えば予約枠が最大10 個だとすると、11 個の出力をソフトマックス関数にかけ、予約がいくつ埋まる可能性が高いかを推定する方法が考えられる。

だがこれは、出力次元の次元が変動するうえ、画像分類のような「多次元の領域での分割」ではなく「1 次元の中での区分け」だからである。

例えば、4 枠の5 クラス分類で[0:30; 0:30; 0:31; 0:08; 0:01] といった結果が出た時、「最大値は3 番目だから、2 つは売れるとみていい」などと考えるのは、明らかに無理がある。

ではどうするか

論文に書かれているestimate demand は、その商品が1 つという性質上「予約が埋まる個数の期待値の推定」と同じである。

つまり「予約が埋まる割合の期待値」と言ってよい。

この考えのもとで、多値分類への拡張を行いたい。

提案したいのは、「入力に予約枠の数を追加し、出力はあくまで1 次元」という方法である。

仮に10 枠あったとすると、論文に書かれている特徴量に加えて、この10 という数字を予約枠数用のノードから入力する。

そして出力は0.57 だったとすると、「期待値として5.7 件予約が埋まる」と解釈する。

strategy model では、この0.57 を直接用いる。

このような方法を取ることで、枠の変化自体も、自然にモデルに取り入れることができるようになると思われる。

モデルテストにあたっては、入力する予約枠の数字\(n\) のみを変更し、期待値がほぼ変化しない(ただし、期待値より枠が少ない場合は枠数と同じ出力が望ましい。上記の場合だと、\(n < 5:7\) であれば、期待値を\(n\)に近い値で出力するのが理想)ことを確かめることが推奨される。

課題2

下記論文section4.2においてdemand scoreとされている\(D\)を競合他社のデータを用いずにどのように導出するべきか、アイデアを述べてください。

Customized Regression Model for Airbnb Dynamic Pricing

https://www.kdd.org/kdd2018/accepted-papers/view/customized-regression-model-for-airbnb-dynamic-pricing

考察と回答例

私の見る限り、\(D\) の計算方法については、その詳細が書かれているわけではない。企業秘密ということだろうか。

ここでは、競合他社という単語の意味をAirbnb であると解釈した場合とAirbnb 視点で競合他社と競合他社のデータがない場合の考察を行う。

競合他社=Airbnb の場合

強化学習的な\(D\) の最適化を提案したい。つまり、実運用の中で \(D\) を調整していくのである。

実際には、ガウス正規化される前の \(D’\) を調整する。

\[ D := \frac {D’ – \mu}{\sigma} \]

という標準化計算を行うとして、バッチ正規化のように移動平均、移動分散を用いて、モデルに組み込む。

要するに、strategy-model をさらに2 段階に分けるという方法である。

データは1 年分とのことなので、例えばまず\(D′\) の初期値を標準正規分布になるよう当てはめ(ここで与える値を、estimate demand 等から適当に与えた\(D′\)の予測順位ににしてもよいかもしれない。

例を挙げると、100 件の物件があれば、標準ガウス分布から100 個サンプリングし、\(n\)位の物件はその\(n\)番目に大きな数字を\(D′\)の初期値とする)、そこからまず前半半年分のデータを用いて、\(\theta\)の最適化を行う。

そこから、強化学習的にデータを与え続け、\(D′\)と\(\theta\)を交互に最適化していくのである。

競合他社=Airbnb から見た同業他社の場合

estimate demand における、特徴量の分布が重要である。

ここが、同業他社も含めた全貸出宿の特徴量の分布とほぼ同じであれば、何の問題もなくそのままモデル最適化を行えばいい。

もしも、Airbnb が抱えるデータの特徴量分布\(p(x)\) が、実際の分布\(p′(x)\) と異なるのであれば、共変量シフトの考えが必要になる。

\(D\)については\(p′(x)\)からサンプリングして平均分散等を出すとよいと思われる。

参考文献

[1] Yiping Lu, Aoxiao Zhong, Quanzheng Li, and Bin Dong. Beyond nite layer neural networks: Bridging
deep architectures and numerical differential equations. arXiv preprint, arXiv:1710.10121,2017.
[2] 杉山将,山田誠, ドゥ・プレシ, マーティヌス・クリストフェルリウソン, 非定常環境下での学習:共変量シフト
適応,クラスバランス変化適応,変化検知(2014)

この記事をシェアする