天真的预测日前

inn*_*neb 1 python statistics pandas

我想用我拥有的数据集做一个朴素的预测,但我正在努力这样做。

    values = DataFrame(dataset.iloc[:, -1])
    Y_naive = pd.concat([values.shift(24), values], axis=1)
    Y_naive.columns = ['t', 't+1']
    x = Y_naive.values
Run Code Online (Sandbox Code Playgroud)

我基本上拥有的是每小时数据,我想在其中比较关于其表现形式 {0,1} 的最后一列。由于我想将此天真的预测与其他日前​​预测器进行比较,因此我想使用前一天 (shift(24)) 的数据来预测实际表现。天真预测:

    def naive_forecast(x):
        return x
    predictions = list()
    for x in test_x:
        yhat = naive_forecast(x)
        predictions.append(yhat)
Run Code Online (Sandbox Code Playgroud)

对我来说,如何进行映射过程非常不清楚。这意味着如何放弃对于二进制分类测试我想使用 24 小时前的数据将其映射到现在迭代整个数据集的数据的论点。( https://en.wikipedia.org/wiki/Forecasting#Na.C3.AFve_approach )

Edw*_*nan 5

如果没有更清晰地了解原始数据框的外观,这将很难回答。值的列和行是什么?

我会尽量回答你的问题。一个幼稚的预测只是前一时期的价值。假设您的原始数据框设置为

    index   'original'
    time1     x1
    time2     x2
    time3     x3
Run Code Online (Sandbox Code Playgroud)

朴素的预测列只是将原始值转移到适当的时间索引。用一个简单的 df 示例作为

    index                            'original'
    2017-08-19 17:49:08.102868         0
    2017-08-20 17:49:08.109869         1
    2017-08-21 17:49:08.109869         2
    2017-08-22 17:49:08.109869         3
Run Code Online (Sandbox Code Playgroud)

一天一换:

    naive_prediction = df.shift(1, freq=datetime.timedelta(days=1))
    naive_prediction.columns = ['naive_prediction']
Run Code Online (Sandbox Code Playgroud)

退货

    index                       'naive_prediction'
    2017-08-20 17:49:08.102868         0
    2017-08-21 17:49:08.109869         1
    2017-08-22 17:49:08.109869         2
    2017-08-23 17:49:08.109869         3
Run Code Online (Sandbox Code Playgroud)

现在我们只需要合并这两个数据帧,naive_prediction 列将包含每个索引位置的适当值。

    final_df = df.merge(naive_prediction, how="outer", left_index=True, right_index=True)
Run Code Online (Sandbox Code Playgroud)

哪个应该返回一个 final_df

    index                          'original'   'naive_prediction'
    2017-08-19 17:49:08.102868         0           NaN
    2017-08-20 17:49:08.109869         1            0
    2017-08-21 17:49:08.109869         2            1
    2017-08-22 17:49:08.109869         3            2
    2017-08-23 17:49:08.109869        NaN           3
Run Code Online (Sandbox Code Playgroud)

其中每个索引位置的值等于前一个索引位置的原始值。