Re:ゼロから始めるML生活

ミスよりグズを嫌え

【論文メモ: Airbnb Pricing Model】Customized Regression Model for Airbnb Dynamic Pricing

f:id:nogawanogawa:20180920205727j:plain

こんな記事を見かけました。

honawork.hatenablog.com

やべえ、、、めっちゃ面白そう!

ってことで、普段はディープラーニング関係しか論文読まないんですが、たまにはこんなのも読んでみました。

論文

KDD 2018 | Customized Regression Model for Airbnb Dynamic Pricing

著者

Peng Ye, Julian Qian, Jieying Chen, Chen-hung Wu, Yitong Zhou, Spencer De Mars, Frank Yang, Li Zhang

背景

Airbnbは家の貸出やアトラクションの予約を行うオンラインマーケットである。 このような、貸し手(ホスト)と借り手(ゲスト)の二面性がある状況下では、価格は需要と供給のバランスを考える上での重要なファクターである。 Airbnbでは直接物件の価格を調整したりは行わないが、様々な形でユーザーの価格設定を支援する中で、物件の価格に関わっている。

現在ではAirbnbは独自に適正価格推定を行い、それをホストに2つの機能として提供することで価格設定を支援している。

1つ目はPrice Tipsである。 この機能では各日の推奨価格をホストに提示する。

f:id:nogawanogawa:20180920202836p:plain
Price Tips

2つ目はSmart Pricingである。 これは、ホストが最低価格と最高価格を指定するだけで自動で日毎の価格を設定する機能である。

f:id:nogawanogawa:20180920202900p:plain
Smart Pricing

このように、Airbnbのビジネスにおいて価格推定機能は重要な役割を担っている。 しかし、その時々によって需要が変動し、最適な価格も変動するためダイナミックプライシングが必要になる。

以下にAirbnbのダイナミックプライシングの難しさについて大きく2つ示す。

需要推定

ダイナミックプライシングに関するこれまでの研究では、主に均質な商品に対して研究がなされてきた。 古典的には、価格Pに対してどれだけ需要が変動するかを考える際に需要曲線F(P)を用いて考え、P×F(P)を最大化するようにPを設定することを考える。

これに対してAirbnbでは、価格だけでなく、現在の時間t、物件idを含めた需要関数F(P, t, id)を採用している。 時間tを取り入れているのは旅行業には季節の影響が非常に大きいことが関係している。 以下に過去五年間に"Airbnb"がGoogle検索された回数を示す。

f:id:nogawanogawa:20180920231723j:plain

単調増加の傾向とは別に周期的な増減が見て取れる。これはおそらく、多くの人が夏に旅行を計画するためであろう。 これは、別の国では季節によって別の傾向が見られるはずである。 さらに、特定のイベントも旅行に関する需要に強く影響を与える。 このように、季節によって需要は強く影響を受ける。

滞在予定日までの残日数(リードタイム)も需要に関係すると考えられる。 滞在日までの残日数が少なくなるにつれて、物件が予約される可能性も低下すると考えられるためである。 以上より、需要には時間tが大きく影響を与えられていると考えられる。

また、通常ホテル等では客室の品質は均質に整えられているのに対して、Airbnbでは物件はすべて異なるものになっている。 通常の一軒家だけでなく、城、ツリーハウス、ボートなど、様々な物件が貸し出されている。 さらに、同じような物件であってもユーザによる評価が多いほうが人気になり、これらはすべて異なる需要曲線になると考えられる。 このように、物件の特性も需要に対して大きな影響を与えていると考えられ、物件idで区別して需要を考える必要がある。

このように、Airbnbでは需要関数F(P, t, id)を採用し、通常より複雑な関数になっている問題がある。

単価のみの設定

一般の旅行代理店では、航空券やアトラクションと滞在のチケットをあわせたプランをカスタマイズすることで、セット料金を調整することが可能である。 彼らはこれにより、市場の反応を見ながら様々な施策を打つことができる。

その一方で、Airbnbでは、単純に物件の貸出料しか設定できない。 さらに、Airbnbのホストは推定された価格を部分的にしか採用しないことが起こりうる。 Price Tipsの利用者は提示した推奨価格より高めに設定するかもしれないし、Smart Pricingの利用者は最低価格を高く設定してしまい常に最低価格を設定するようになるかもしれない。

このように、一般のダイナミックプライシングとは異なる状況下で考える必要がある。

目的とアプローチ

目的

  • 販売する時に応じて適正な価格を推定する(ダイナミックプライシング)モデルの構築

アプローチ

  • 需要から推奨価格への変換するモデルの構築(Pricing Strategy)
    • Gradient Boosting Machine (GBM)による予約可能性の推定
    • 非線形回帰モデルによる価格推定モデルの構築
    • Support Vector Regression における損失関数を用いた学習

提案手法

価格推定モデルの概要を下記に示す。

f:id:nogawanogawa:20180920221639j:plain:w500

提案手法では、はじめに物件が予約される可能性を推定する。 次に、予約される可能性に基づき、適切な価格を推定する。 最後に、ホストの要望や近隣のイベントなどを考慮して最終的な価格を推定する。

The Booking Probability Model

各物件の需要曲線を求めるために、Booking Probability Modelを構築する。 特徴量の例を下記に示す。

  • Listing Features
    • 一晩あたりの価格、部屋の種類、収容人数、風呂の数など
  • Temporal Features
    • 季節、前の人がcheckoutしてからの期間、リードタイムなど
  • Supply and demand dynamics
    • 近隣の物件の混み具合、景色、検索された回数など

これらの特徴量を使ってGBMによって予約される可能性を推定する。 このとき、すべての物件をまとめて考えるのではなく、地域ごとに区切ったほうが良い精度がでることがわかった。 地区ごとに分けてGBMを使用する手法を使用する。

推定された予約される確率は次のような価格に関する関数になっている。

f:id:nogawanogawa:20180922090723j:plain:w500

横軸は規格化された価格を示しており、1.0はその時表示されている価格である。 この関数は異なる価格点に対して同様に予約される確率を推定して導出され、価格0のとき予約される確率は1.0、価格∞のとき予約される確率は0としている。 しかしながら、この関数は正確ではなく、図のように実際の需要曲線と異なる。

需要曲線を精度良く算出できないのは、下記のような原因が考えられる。

  • 同じ物件が幅広い価格帯で売りに出されたときのデータが存在しない
  • 一つ一つの物件が固有
  • 複数の特徴の相互作用

そのため、最適価格について再定義し、評価軸を設定する別のアプローチを考える。

STRATEGY MODEL

適正価格の再定義

まず、適正価格について再定義する。 Airbnbのサイトに掲載される価格をP、推奨価格をP_{sug}、真の適正価格をP_{0}とすると、推奨価格が悪いとする場合を以下のように定義する。

  • 実際に予約されて、かつP > P_{sug}の場合(ホストが損しかねない推奨価格)
  • 実際には予約されずに、かつP_{sug}>= Pの場合(推奨価格が高すぎて、予約されない)

次に、以下の場合は良し悪しが判断できないため、評価しないものとする。

  • 実際に予約されて、かつP_{sug} >= Pの場合
  • 実際には予約されずに、かつP > P_{sug}の場合

ケース分けすると次の用になる。

Booking Non-Booking
P\_{sug} >= P a b
P > P\_{sug} c d

次に以下の指標について考える。

Price Decrease Recall(PDR)

PDR = \frac{d}{b+d}

例えば、下のケースを考える。

f:id:nogawanogawa:20180922164514j:plain:w500

このとき、3/5は実際の価格より安く設定して、それでも予約されていない。 このときPDRは0.6である。

Booking Regret (BR)

BR = median_{bookings}(max(0, \frac{P-P_{sug}}{P}))

BRの指標について、下に示す。

f:id:nogawanogawa:20180922164538j:plain:w500

この場合は3つの場合で予約された価格より推奨価格が低く、それぞれ14%($15)、5%($10)、6%($5)だけロスさせてしまいかねなかった。 そのためBR = Median(14, 5, 6, 0, 0) = 5%となる。

これらの指標について考えると、PDRとBRはオンライン取引に関係していると考えられる。 特にPDRは予約の増加に関連し、売れなかったときに推奨価格が実際価格より低かった件数を示している。 逆に、BRは予約された価格と推奨価格がどれだけ近かったかを示しており、もしも推奨価格通りに設定した場合の損失額を示している。 つまり、PDRは大きいほどよく、BRは小さいほどよいことになる。

そのため、戦略としてはPDRとBRをそれぞれ最適化することを考えれば良い。 ただし、これらはトレードオフの関係にある。

目的関数

目的関数を設定する上で、学習データのモデルについて定義する。


(x_i ,y_i)^{N}_{i=1}

ここでx_iは関連する特徴量を表し、y_iは予約されたかどうかの状況を0/1で表している。 x_iには

  • 実際の表示価格
  • 推定された予約される確率
  • その他、市場での需要要因

が含まれているものとする。

つぎに推定価格について式で示すと、


f_{\theta}(x_i)

で表される。 このとき\thetaはfを決定するための学習パラメータである。

これを使用して、損失関数を考える。 以下に、\epsilon -insentive損失関数(a)と本論文の損失関数(b)を比較した図を示す。

f:id:nogawanogawa:20180922090830j:plain:w500

\epsilon -insentive損失関数は決まった最適価格が必要になるが、この場合はそれがわからない。 一方でビジネスの観点から、最適価格が含まれる範囲は絞ることができるのでそこを利用する。

以上を考慮した損失関数を以下に示す。


\mathcal{L} = arg min_{\theta} \sum^{N}_{i=1} (L(P_i, y_i) - f_{\theta}(x_i))^{+} + (f_{\theta}(x_i) - U(P_i, y_i))^{+}

ここで、+max(0, .)を表す。 Pは予約された価格を表し、L, Uはそれぞれ、最適価格が存在する範囲の最低値と最高値を示しており、

L(P_i, y_i) = y_i \cdot P_i + (1-y_i) \cdot c_1 P_i

U(P_i, y_i) =  (1 - y_i) \cdot P_i + y_i \cdot c_2 P_i

で表される。 予約されたときは

L(P_i, y_i) = P_i

U(P_i, y_i) = c_2 P_i

予約されなかったときは、

L(P_i, y_i) = c_1 P_i

U(P_i, y_i) = P_i

となる。

c_1, c_2は市場の動向から調べたハイパーパラメータとなっている。

具体的に損失関数の意味を図示したものが下記のようになる。

f:id:nogawanogawa:20180922090839j:plain:w500

この図が意味するところは、(c_1P, P)または(P, c_2P)の範囲で最適価格として損失関数が0になるようになっており、それを外れると損失関数が増大する。

なお、c_1, c_2がともに1のとき、最適価格がわかっていることになる。

需要に基づく価格設定

上で示したf_{\theta}について考える。 これを考える上で前提を下記に示す。

  • 価格は予約される確率に対して正の相関を持つ
  • 推奨価格はホストが設定しうる価格の中心軸となる
  • 需要に関する付加情報は容易に入手できない

これらを踏まえ、推奨価格について下記のモデルを設定する。


f_{\theta} = P_{sug} = P \cdot V

Pはカレンダーに表示されている価格を示している。 このときVはPの変動幅を表し、


V=
\left\{
  \begin{array}{c}
    1+\theta_1 (q^{\varphi^{-qD}_{H}} - \theta_2)\ \ \ (if\ D>0)\\
    1+\theta_1(q^{\varphi^{-(1-q)D}_{L}} - \theta_2)\ \ \ (if\ D\leq0)
  \end{array}
\right\}

としている。

qは価格Pのときに推定される予約される確率、Dは集合のレベルで得られる需要係数である。 Dはガウシアン分布に正規化されており、値が大きいほど需要が大きいことを示す。 \theta_1は価格の変動の割合、\theta_2はカレンダーに表示されている価格との差を調整するファクターを示している。 \varphi_H\varphi_Lは推定価格の曲率を決める係数であり、1 < \varphi_L< \varphi_H < 2を満たす定数で、学習するシステムによって非対称にしてある。

このモデルを図示すると下の様になる。

f:id:nogawanogawa:20180922090907j:plain:w500

需要Dに対して、上振れした場合をHigh Demand、下振れした場合をLow Demandで示してある。

このように需要を非線形に反映するモデルとなっている。

学習

  • 各物件個別に学習する
  • 最適化関数 : SGD
  • 学習データ : 過去一年分のAirbnbの予約データ

評価

オフライン評価

提案手法の効果について評価を行う。

データセット

テストに使用するパターンを示す。

  • ds : 推定を実施した日付
  • ds_{eval} : 結果を取得した日付
  • ds_{night} : 価格を推定する対象日付

評価として使用するパターンを図示すると下記の3パターンになる。

f:id:nogawanogawa:20180922090930j:plain:w500

  1. 価格推定した以降に予約され、当日を迎えた(positive)
  2. 価格推定した以降に予約されずに、当日を迎えた(negative)
  3. 価格推定した以降に予約され、まだ当日を迎えていない(positive)

この3パターンを評価対象とする。

評価には

(a) 繁忙期(3週間)
(b) 閑散期(3週間)
(c) 長期スパンで見たとき(3ヶ月)

の3パターンで評価を行う。

一般的な価格推定との比較

Strategy modelを使用しなかった場合に対するPDR、BRの上昇率を下記に示す。

dataset PDR BR
(a) +15.6% 5.74%
(b) +13.43% -6.38%
(c) +11.85% -7.5%

(a)〜(c)の場合においてPDRはすべて上昇している。また、BRは(a)以外は減少している事がわかる。 これらは、今後の学習によって価格推定の精度はさらに向上するはずである。

オンライン評価

次に実際の市場に対する定性評価を下記に示す。

f:id:nogawanogawa:20180922090940j:plain:w700

f:id:nogawanogawa:20180922090949j:plain:w700

毎週末にかけて推奨価格が上昇しており、さらに東京では3月末〜4月初めにかけて価格が上昇している。 これは、春休み・春の季節と重なり、直感的に正しい推奨価格になっていると言える。

結論

Airbnbでは、ホストがより簡単かつ効果的に物件の価格を設定できるように、価格推定を行っており、 本論文ではAirbnbが使用しているダイナミックプライシングモデルについて紹介した。

オフライン/オンラインの評価を行い、ともにmax revpricing modelよりも優れた結果が得られた。

今後の展開として、再訪問による収益を最大化することを検討している。

感想

なんとなくですけど、このメルカリの価格推定とかにも応用できそうですね。

www.youtube.com

ちゃんと読むのにまだまだ時間がかかりますね。 基本がわかってれば要点を掴むのが早そうなんですが、基本からわかってなかったみたいです。

でもいつもと違う種類の論文も、たまにはいいですね。勉強になりました。