Yoshiki Irie
[引用論文] Customized Regression Model for Airbnb Dynamic Pricing
https://www.kdd.org/kdd2018/accepted-papers/view/customized-regression-model-for-airbnb-dynamic-pricing
1. The Booking Probability Model
- 予約が入るかどうかの確率を計算する
- 予約が「入る/入らない」なので、行う分類は2クラス分類である
- 予測のための特徴量として以下の3つを使用する
- 部屋の特長に関するもの(部屋の種類、何人入れるかなど)
- 時間に関するもの(季節、日照時間、残り日数など)
- 需給の変遷(近くの予約可能数、検索と契約の割合など)
- 予測モデルとして勾配ブースティングを使う
- 予測値の評価の指標はAUC(Area Under the Curve)を用いる
- なぜこのような予測をするのか?
- 予約をする地域ごとに特徴量の影響が異なる(地域別に予測が必要)
- 収益が需要量と価格の関数であり、需要の推定にこの確率が必要
2. Evaluating Price Suggestion
- 「最適」な提案価格をしたい→最適の基準は?
- データの散らばり、サンプルの特異性、特徴量間の依存性などを考慮すると予測が大変に
- 価格P, 最適価格Po, 提案価格\(P_{sug}\)を用いて評価の指標を決める
- \(P_{sug}<P\) かつ予約が既に入っている時、ホストが提案価格で予約を受けたとすると\(P-P_{sug}\)分の利益の損失があるため
- \(P_{sug}=>P\) かつ予約がまだ入っていない時、予約の入っていない時の価格よりもさらに高い価格だとより予約が入る確率が低くなってしまう
- それ以外は提案が良いのかどうか確実にはわからない
- 「最適でない」時の損失を少なくする方式をとる
3. Strategy Model
- 損失関数\(L\)を次のように定義する
- N個のデータは特徴量ベクトル\(xi\), 予約された\(yi=1\)どうかを表す\(yi\)の組数式の右上の\(+\)は式の値が\(0\)以下となった場合は全て\(0\)とみなす記号
- \(0c1<1, 1<c2\) となる定数\(c1, c2\)が存在し、以下の関係が成り立つ
- 損失関数は予約された時は\(\bigl(Pi, c2Pi\bigr)\)間、予約されていない時は\(\bigl(c1Pi, Pi\bigr)\)間の範囲外に価格を設定すると「最適でない」と判断され、誤差が増える
- このような損失関数を最小にする価格fになるようなパラメータ\(\theta\)を求める
- 提案価格\(Psug\)を\(Psug=PV\)と分解する、\(P\)はホスト側で設定する代表価格で、\(V\)は以下のように定義される
- \(q\)は予測した予約確率、\(D\)はクラスタ毎に計算される需要スコア
- \(\phi\)を調節して需要曲線を「曲げる」ことでその非線形性を\(V\)に反映させる
- \(\theta1, \theta2\)を\(V\)の偏微分を計算することで求める(損失関数を最小にする\(\theta\))
- なぜこのようなStrategy Modelをとるのか?
→価格が「最適」かどうかわからないため、「最適でない」場合の損失を減らす方策をとる必要があるため
学習の方法
- 似たような種類・マーケットでもその資産状況とホストの好みによって最適なパラメータは大きく違うので個別に学習する
- 安定しない提案価格や小さすぎる価格変化を防ぐために、パラメータ\(\theta1, \theta2\)に制限をかける
- 損失関数の最適化に確率的勾配降下法を使用することで最適化が容易になる
- 最新のデータを学習に用いることで季節的な傾向を見出すことができる
- 将来予約のデータはマスクしてハイパーパラメータを調節して、あとで学習がうまく進んでいるかを確認するために使う
例えば次のような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
(課題1 解答例) 複数値分類の問題に置けるAirbnbのモデルの適用
論文で述べられていた2 値分類のモデルでは, 各リスティングに対して予約可能性を様々な特徴量から推定し, それを利用して需要の推定値を求めた.
複数値分類のモデルで予約可能性をどのように推定すれば良いか考える.
今回考えるのはリスティングに予約がいくら入るのかということである.
つまり予約が「入る/入らない」の2 択ではなく, 「何人分予約が入っているか」について, その人数に応じて予約確率を推定する.
ここで, 予約枠は時間帯によって代わり, あるリスティング\(i\)に対してその枠数を\(N_i\bigl(t\bigr)\)とし, リスティング\(i\)の\(j\) 人目の予約が入る確率を\(q_{i,j}\)とする.
リスティング\(i\)に\(N_0\)枠だけ予約が埋まる確率\(Q_{i,N_0}\)は, 1 つ1 つの予約が順番に行われると考えるならば
と表される. なお,\(Q_{i,0} = 1-\Sigma_jQ_{i,j,} q_{i,N_i\bigr(t\bigl)+1 }= 0\)とすれば, 予約が1 つも入らない確率や予約枠が全て埋まる確率も考えることができる. この値を推定する.
今, リスティング\(i\) にまだ予約が入れられるならば, 予約を「入れる/入れない」という問題として\(qi\) が論文と同じように推定できる.
その際, 残りの予約枠数, 最大予約枠数などを特徴量として新たに加える. これは「あとどれくらい予約が可能なのか」が予約可能性に影響すると考えられるためである.
これにより, テストデータ\(i\)に対して予約確率の推定値\(\hat{q}_{i,j}\)が求められる.
その後, 推定値を用いて\(\hat{Q}_{i,N}\)の値が求められ,\(0 \leq N \leq N_i\bigl(t\bigr)\)の範囲でそれぞれ推定値を求め, 最尤推定法によって「何人予約を入るのが一番尤もらしいか」という確率が求められる.
この値を需要の推定値とすれば良い.
課題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
(課題2 解答例) \(D\)を競合他社のデータを使わずにどのように導出するべきか
需要スコア\(D\) を競合他社のデータを使わずに求めるためには, 自社で集めた過去のデータと,現在のデータを元に予測する必要がある.
過去のデータから, 予測したい\(D\)と同じような状況,例えば過去の同じ季節の似たような特徴量を持つデータの需要スコアなどを参考にする.
一方で, 現在のトレンドを取り入れる必要もあるので, これを自社の直近のデータを使用する.
導出方法として, 需要が高い時\(D > 0,\)需要が低い時\(D <0\) となるようなモデルが必要になる.
そのため, 過去のデータを用いて\(D\)の値を求める回帰モデルを作成する.
各特徴量が需要スコアの説明変数となっていると考えられる(寄与の小さいものは無視する) ため, 需要スコアを目的変数, 寄与の大きい各特徴量を説明変数とした重回帰分析を行う.
こうすることで, 現在のトレンド(現在の各特徴量) を用いて需要スコアを導出することができる.