Oren Etzioni的机票价格预测算法

最近看到一则eBay收购了商品价格预测的网站decide.com的新闻,再次证明了商品的价格预测这事是靠谱的。新闻里还提到Decide.com的全部26名员工,除了联合创始人兼CTO  Oren Etzioni 外,都将加入到eBay。 Oren Etzioni 已被微软创始人保罗 ·艾伦任命为一家新成立的人工智能机构的总裁。google了一下原来这个Oren Etzioni就是几年前做了个机票价格预测网站被微软1.15亿美元收购的大牛。看来他是真正尝到了商品价格预测的甜头,然后就复制了自己的成功。

自己以前也做过价格预测的工作,对这方面一直挺有兴趣,于是怀着一颗对机器学习八卦的心,学习一下Oren Etzioni是怎样预测机票价格的(其实也想看看他是怎么预测商品价格的,没找到相关资料)。

先说说为啥要做这个机票价格预测。2002年这哥们坐飞机的时候,发现周围乘客买的机票价格都比自己的便宜,立马就怒了,作为一个从事机器学习的科研工作者,表达怒气的方式也与众不同,他决定做一个帮助用户购买便宜机票的软件。02年怒的,回头就开搞,在03年SIGKDD上发了paper【1】,06年产品上线(Farecast),08年就被微软给收购了。看来有时候,情商低容易生气啥的也不是坏事。

再来看看他是怎么做这个预测算法的,其实并不复杂。

1、数据

每个航班起飞前21天的价格数据(每三小时抽样一次),两条航线,一共6个航空公司,12000条数据。对于每个航班,21*8=168个采样价格,记录下其中最低的价格以及经济舱机票售完的时间。

2、模型训练

分别训练三个独立模型Ripper,Q-learning,time series,并使用Stacked generalization方法将三个结果融合。

Ripper:是一种决策树的快速学习算法,据说准确度和C4.5差不多,但是效率上有明显优势。用到的特征不多,也很直观:航班号,距离飞机起飞的时间,当前价格,航空公司,航线,输出就是“buy”或者“wait”。由于两种预测错误的代价不同(如果将“buy”预测成“wait”,最悲催的下场是经济舱卖完了,只能买商务舱了),作者使用了MetaCost【2】解决这一问题,进一步提升了决策树模型的性能(+14%),但是却造成混合模型的效果下降(-29%)。所以,最终在决策树里没有用这个MetaCost。看来几个精心调优的单模型融合在一起的效果还真不一定是最好的。

Q-learning:一种增强学习算法,对模型在不同状态下采取的不同决策给予相应的奖惩,最终可以得到该模型在每个状态下的最优决策。这里将同一航班距离起飞前的时间作为不同的状态,如:UA168-Jan7-120,而“buy”和“wait”就是不同状态下的可能采取的行动,时间衰减因子为1。

惩罚函数如下:
Oren Etzioni的机票价格预测算法_第1张图片


time series:下一时刻价格是过去观测到价格的加权平均。如果时间序列模型预测的下一时刻价格高于当前价格,则输出“buy”,否则,输出“wait”。
Oren Etzioni的机票价格预测算法_第2张图片

其中a(i)是随i单调递增的函数,表示近期的机票价格在预测中其更大的作用,最终a(i)选用的是简单的线性函数。

多模型集成方法:Stacked Generalization(stacking)。就是将上面三个模型的输出作为最终集成模型的输入,这里应该也是用的决策树来做的集成。

3、实验结果:

模拟实际买票的场景,在飞机起飞前的不同时间段的购买行为,其中Optimal是最理想的情况,也就是知道未来机票的价格数据。
By hand,是模拟人的行为,做了简单的规则,如果当前价格大于历史同期最低价并且离出发时间大于7天,就“buy”,否则,“wait”。Upgrade Cost是由于“wait”导致经济舱没票了,被迫升级带来的额外支出。从单个模型看,时间序列那个还是挺不靠谱的,但是还是被加入到了最终的模型里面,应该是和其他的模型有着不错的互补效果吧。
Oren Etzioni的机票价格预测算法_第3张图片


4、题外话

好的算法也需要产品设计的配合才能发挥出最大的作用。基于机票预测算法的产品Farecast在2007年1月推出了Fare Guard最低价格担保模式,客人只需支付10美元购买此项服务,如果在未来7天内机票价格最终上涨,Farecast将支付客人锁定价格与最终实际票价之间的差额。如果机票价格下跌,客人将可以享受由此带来的费用节省。在我看来,这才是farecast一举成名最终被收购的关键。

【1】Oren Etzioni. To Buy or Not to Buy: Mining Airfare Data to Minimize Ticket Purchase Price. 2003
【2】P.Domingos. MetaCost: A general method for making classifiers cost-sensitive.1999.

你可能感兴趣的:(机器学习和数据挖掘)