Algorithm 从向量历史预测二进制占用向量

Algorithm 从向量历史预测二进制占用向量,algorithm,binary,statistics,time-series,prediction,Algorithm,Binary,Statistics,Time Series,Prediction,我有一组二进制向量,其中每个向量表示一所房子的一天占用率,由48个元素组成(每个元素代表一天中的30分钟)。每个元素可以是1,表示房屋已被占用,0表示未占用房屋 我的任务是根据同一天的历史来预测第二天(周一的历史等等)。到目前为止,我使用汉明距离找到了历史上最相似的5天,并从中计算了这5个数字的平均值,即入住率。当概率大于某个X时,在我的例子中是0.4,我预测它会被占用 但是肯定有更有效的方法来实现这一点,任何能够捕捉历史趋势的算法?您可能只想保存最近的N天,和/或为最近的几天分配更大的权重。否

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

我的任务是根据同一天的历史来预测第二天(周一的历史等等)。到目前为止,我使用汉明距离找到了历史上最相似的5天,并从中计算了这5个数字的平均值,即入住率。当概率大于某个X时,在我的例子中是0.4,我预测它会被占用


但是肯定有更有效的方法来实现这一点,任何能够捕捉历史趋势的算法?

您可能只想保存最近的N天,和/或为最近的几天分配更大的权重。否则,算法不会对用户习惯的改变做出足够快的响应

如果您通过间隔而不是位向量来比较入住率,您可能会得到更好的结果-通常,一栋房子将在很长时间内被占用/未被占用,而不是每半小时交替入住一次。这在平日尤其如此,从早上开始到晚上,房子将有八(或九,或十)个小时无人居住;早晨的入住时间间隔将是一个很好的预测日中(un)入住时间间隔的指标,因为如果入住者早晚下班,那么他们可能早晚到家。如果他们在10:00或11:00仍然在家,那么他们可能整天都在家(因为生病或度假)。与位向量相比,比较和索引间隔也很容易——例如,您可以将天存储在一个(或者更确切地说是转换为树映射的间隔树)中,以间隔为键,以天为值,以便快速确定哪些天共享当天的早晨占用间隔

您将需要两个数据结构:一个间隔树(地图)数组,一周中每天一棵树,它使用早晨占用间隔作为键,使用前几天的集合作为值。该集合需要汇总夜间入住率区间;任何给定半小时周期的预测占用率都是前几天具有相同早晨占用时间间隔的模式(因此,如果您存储了7天,其中5天预测时间X的占用率,那么数据结构预测时间X的占用率)。您还需要一个包含所有前几天的队列,以便可以从间隔树中删除最早的几天。(另一种选择是,将更大的权重分配给最近几天;但是,由于您还需要降低以前几天的权重,因此实施起来比较困难。)


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

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

我会尝试对你的方法进行一次修改,即查看之前的24小时,而不是“今天到目前为止”,或者使用两种方法并平均结果。例如,以前的24小时方法会很快在假期中出现,但如果用户碰巧在星期三或其他时间从未有过假期,那么到目前为止的这一天方法可能会错过假期。这是一个类似于这场比赛的概念,它通过观察你最近的四次投球来预测下一次

另一个改动是考虑汉明距离计算中的权重。例如,通过
lambda^(-n)
对每个位匹配进行称重,其中
lambda
是一个可以调整的参数(从类似1.1的值开始),并且
n
表示该位表示的过去的小时数

任何一种分类算法,如支持向量机、逻辑回归、随机森林等,都应该能很好地工作。要添加到特征向量的特征:

  • 星期几
  • 时辰
  • 本小时平均入住率
  • 当天平均入住率
  • 本次平均入住率(天、小时)
  • N的各种值的过去占用N克(即前N小时的位向量)
  • 是假日吗
  • 日出后数小时

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

就我个人而言,我只是使用该模式查找历史上每半小时间隔内最频繁的职业状态。如果只想使用最新的状态,则只采用它们的模式。我提出这一点只是为了指出,您必须决定要采取什么样的预测方法,然后实施它。除非你有坚实的理论(或实践)支持使用汉明距离是正确的方法,否则使用诸如汉明距离之类的复杂度量并不能使预测更好。同样的论点也适用于我的使用模式的建议。好的,基本上我在这里做的是采取最频繁的区块,但我使用汉明距离从前几天中根据当前一天的数据选择最合适的日期。所以我比较了一天的开始和前几天的开始。因此,汉明距离有一点道理。我现在想做的更像是创建一个典型的一天左右,这就是我所说的捕捉