从矢量历史预测二进制占用矢量

时间:2013-04-30 18:19:09

标签: algorithm binary statistics time-series prediction

我有一组二元向量,其中每个向量代表一个房子入住的一天,由48个元素组成(每个元素一天30分钟)。每个元素可以是1表示房子被占用,0表示非占用房屋。

我的任务是根据同一天的历史(周一的星期一等)预测第二天。到目前为止,我正在使用汉明距离找到历史上最相似的5天,并从中计算出占用的概率作为这5个数字的平均值。当概率高于某些X时,在我的情况下为0.4,我预测它会被占用。

但是有一些更有效的方法可以做到这一点,任何可以捕捉历史趋势的算法?

2 个答案:

答案 0 :(得分:1)

你的方法听起来相当合理(它被称为K-最近邻居或KNN),虽然我不确定你是否正在使用正确的距离度量(到目前为止的汉明距离)。你的方法对一天的精确结构非常敏感,并且可能需要很长时间来适应假期等事情,而在一天的前几个小时可能过于敏感。

我尝试的方法的一个改变是查看前24小时而不是“今天到目前为止”,或使用两种方法并对结果取平均值。例如,之前的24小时方法很快会在度假中恢复,但是如果用户碰巧从未在星期三休假或其他事情,那么迄今为止这一天的方法可能会错过假期。这是与rock paper scissors游戏类似的概念,它会查看你最后四次投掷以预测下一个游戏。

我考虑的另一个改变是在汉明距离计算中使用权重。例如,按lambda^(-n)称量每个位匹配,其中lambda是您可以调整的参数(从1.1开始),n表示该位代表的过去小时数

各种分类算法,如SVM,逻辑回归,随机森林等,也应该能够很好地工作。要添加到要素向量的要素:

  • 一周中的一天
  • 小时
  • 这个小时的平均入住率
  • 这一天的平均入住率
  • 平均入住率(天,小时)
  • 对于各种N
  • 值,过去占用N-gram(即前N小时的位向量)
  • 是假期吗?
  • 小时以来的日出

最后,对于新用户,可能需要一段时间才能获得足够的培训数据,因此您可能希望拥有两个模型:基于所有用户的整体模型和单个用户模型。然后,您可以对两个模型的输出进行加权,用户模型的权重增加

答案 1 :(得分:0)

您可能只想保存N个最近几天,和/或为最近几天分配更大的权重。否则,算法将无法快速响应用户习惯的变化。

如果按间隔而不是比特向量比较占用率,您可能也会得到更好的结果 - 通常房屋将在很长一段时间内被占用/未被占用,而不是例如每半小时交替入住。平日尤其如此,从早上开始到晚上为止,房子将被闲置八个(或九个或十个)小时;早上的入住间隔将是中午(非)入住间隔的良好预测因素,因为如果乘客早晚出门工作,那么他们可能会提早或晚回家。如果他们在10:00或11:00仍然在家,那么他们可能整天都在家(因为生病或休假)。与位向量相比,比较和索引间隔也很容易 - 例如,您可以将日期存储在interval tree(或者更确切地说是转换为树形图的间隔树)中,并将间隔作为关键字和日期( s)作为值,以便快速确定哪些天分享当天的早晨占用间隔。

您需要两个数据结构:一个间隔树数组(地图),一周中每天一棵树,它使用早晨占用间隔作为关键字,并使用前几天的集合作为值。此集合需要汇总晚间入住时间间隔;任何给定半小时周期的预测占用率是前一天具有相同早晨占用间隔的模式(因此,如果您存储了7天,其中5个预测占用时间X,则数据结构预测占用时间X)。您还需要前几天的队列,以便您可以从间隔树中删除最早的日期。 (作为替代方案,为最近几天分配更大的权重;但是,实施起来比较棘手,因为您还需要降低旧日的权重。)

您可能会发现只需要两个间隔树,一个用于工作日,一个用于周末。