• 滴滴算法大赛算法解决过程


    回到原点

    上面两篇文章讲了一些分析情况,整个模型变得很不确定了

    数据分析: http://codesnippet.info/Article/Index?ArticleId=00000038
    拟合算法: http://codesnippet.info/Article/Index?ArticleId=00000041

    滴滴算法大赛到底需要什么样子的答案?
    我一开始的想法是建立一个模型,通过天气,POI,交通拥堵的参数来推导出订单数和GAP数。
    但是通过现有的数据发现,这个模型很难建立。

    其实看一下题目,这是一个预测题:

    给定每个区域在时间片tj,tj-1...的各项数据,预测gapi,j+1, ∀di∈D。

    如果不是想研究机器学习的话,其实也没有必要(或者没有可能)建立一个完整的模型。
    我们只需要知道,数据的发展趋势,例如这个时间点是 N ,按照经验,后一个时间点的趋势是上升还是下降,幅度大约多少即可。

    那些因素左右订单

    前几天一直在寻找那些因素制约着订单数。

    9点整和18点整 全区域订单分析图
    订单的总量在不同日期,表现出极大的不同。但是,接单量和司机数有关系,司机数则是比较稳定的,9点的司机数大约是5000人,18点为4500人。(前三个数据是 01-01 到 01-03 节假日 ,01-09 ,01-10,01-16,01-17 分别是节假日,所以早晨的需求比较少 )
    通过分析,我们应该可以整理出一张司机数和时间段的对应函数。(节假日和非节假日区分开来)

    9点整和18点整 全区域订单分析图

    如果我们按照节假日和非节假日去看分时接单量

    • 节假日的早高峰和平日的早高峰项目,相差巨大。
    • 节假日和非节假日,其他时段接单量,基本持平。
    • 每天的8:30分,17:30分 是两个最高值。

    • 根据这个统计数据,我们大概知道了每天的接单情况。可以预测未来的某个时间片的接单量。当然,如果我们能够计算出Gap比率(GAP数/总订单数[GAP+接单数]),Gap数也是可以预测出来的。很遗憾,Gap比率的数据统计如下:(每天订单量起伏比较大,接单数较为固定,GAP比率则变化很大)
      日期别9:00和18:00GAP比率

    预测订单趋势

    上面说了,日期别的订单差异量很大,但是我们是否可以考察一下,每个时段的订单变化率是否有规律可循呢?
    例如在 100个时间片上订单时 N,则101个时间片上,根据统计一般会增加 1.5%的话,则可以预测101个时间片上的订单时 1.05 * N;
    当然如果就这么计算的话,可能会接近于正确答案,但是完全没有使用POI,天气,交通等数据,基本上是不可能获奖的。。。
    不过,我们可以先来试试看,是不是可以找到规律呢。从图表上看,我们应该可以统计出,每个时间点上数据的变化率。

    周三的变化:

    从第一个周三到第二个周三的变化

    从第一个周三到第二个周三的变化率
    订单变化率:(这个时间片 - 上个时间片)/ 上个时间片

    这样的话,我们大概可以对于各个时间片之间订单的变化率做一个统计平均表。
    假设时间片 N 的订单数位 Order ,下一个时间片N+1的订单数为 NextOrder,则 变化率 K = (NextOrder - Order) / Order。
    我们可以计算出全区域的每个时间片的变化率,也可以算出单个区域的每个时间片的变化率。

    每个区域的订单比例

    有些区域订单多,有些区域订单少,这个比例是否会随着时间变化而变化呢?
    放心,基本上每个区域的订单比率很固定的。

    如何解决问题

    题目里面告诉了我们所需测试Gap的时间片的前三个时间片的数据。结合变化率的概念,其实我们可以计算出待预测的时间片的订单量。
    还有一个问题是接单量怎么考虑,我的想法是将这三个已知时间片的接单量的平均值作为新的接单量。
    (有一种情况,例如一个时间片里 有50个订单,但是有1个GAP,这个时候其实不能认为接单量只有49,而应该认为这个区域的基本上是公供需平衡的。1个GAP有可能是偶然因素。所以我这里认为5个GAP以下都是供需正常的。)

    • 第N+1个时间片的GAP = 第N + 1个时间片的订单数 - 第N + 1个时间片的接单能力。
    • 第N + 1个时间片的订单数 = 第N 个时间片的订单数 * (订单变化率+ 1)
    • 第N + 1个时间片的接单能力 = 第 N ,N-1, N-2 个时间片的接单能力的平均值。

    最后公式是:

    • 第N+1个时间片的GAP = 第N 个时间片的订单数 * (订单变化率+ 1) - 第 N ,N-1, N-2 个时间片的接单能力的平均值

    这种方法计算出来的结果可能接近于答案,也可能远离答案。但是完全没有体现出机器学习的作用,所以本人觉得肯定是有问题的。这里只是给出一种解决方案。接下来,开始思考正统的解决方案。

  • 相关阅读:
    Oracle 的日期类型
    简单的同步Socket程序服务端
    MMORPG中的相机跟随算法
    使用了UnityEditor中的API,打包时却不能打包UnityEditor的问题
    C# 中的关键字整理
    Unity3D C#中使用LINQ查询(与 SQL的区别)
    C# 值类型与引用类型的异同
    Unity3D NGUI事件监听的综合管理
    Unity3D 动画状态机简单控制核心代码
    Unity3D判断触摸方向
  • 原文地址:https://www.cnblogs.com/TextEditor/p/5527124.html
Copyright © 2020-2023  润新知