Facebook 先知 add_regressor 没有帮助
Facebook Prophet add_regressor not helping
我正在尝试使用 fbprophet 添加额外的回归器进行实验,但它似乎并没有提高准确性。在一般情况下当然不能保证,但我已经将它归结为一个合成案例,看起来应该如此,但它仍然不是,所以我想知道我是否做错了什么。
这是输入数据:
ds,y
2011-01-01,8
2011-02-01,10
2011-03-01,10
2011-04-01,10
2011-05-01,9
2011-06-01,8
2011-07-01,6
2011-08-01,7
2011-09-01,9
2011-10-01,9
2011-11-01,10
2011-12-01,10
2012-01-01,20
2012-02-01,20
2012-03-01,20
2012-04-01,20
2012-05-01,20
2012-06-01,20
2012-07-01,20
2012-08-01,20
2012-09-01,20
2012-10-01,20
2012-11-01,20
2012-12-01,20
想法是第一年有点嘈杂,这不是第二年的真正指南,第二年所有值都定为 20。
这是我的代码:
import fbprophet
import pandas as pd
import sklearn.metrics
plain = pd.read_csv("data.csv")
plain_train = plain[plain.ds < "2012-01-01"]
plain_test = plain[plain.ds >= "2012-01-01"]
plain_m = fbprophet.Prophet()
plain_m.fit(plain_train)
plain_forecast = plain_m.predict(plain_test)
augmented = pd.read_csv("data.csv")
augmented["extra"] = [20.0] * 24
augmented_train = augmented[augmented.ds < "2012-01-01"]
augmented_test = augmented[augmented.ds >= "2012-01-01"]
augmented_m = fbprophet.Prophet()
augmented_m.add_regressor("extra")
augmented_m.fit(augmented_train)
augmented_forecast = augmented_m.predict(augmented_test)
print("plain_forecast")
print(
sklearn.metrics.mean_absolute_error(
plain_test["y"].values, plain_forecast["yhat"].values
)
)
print("augmented_forecast")
print(
sklearn.metrics.mean_absolute_error(
augmented_test["y"].values, augmented_forecast["yhat"].values
)
)
它首先对未扩充的数据尝试预测 运行,然后用始终为 20 的第二列进行扩充,因此这是数据将基于什么的完美指南,因此可能非常有帮助。
并且输出:
plain_forecast
11.072845254369435
augmented_forecast
11.072872701031054
数字不相同,所以没有完全忽略多余的列,但精度没有提高;虽然噪音水平有所下降,但还是稍微差了一点。
我错过了什么?
代码没有错。但是要记住几件事然后你会看到 fb 先知的不同
这个数据有问题。
在你的模型中,如果你想检查季节性+增长,你应该将年和月分成两个单独的变量。这将有助于任何算法理解每年都有增长,每个月都有季节性曲线。
您在可变数据波动的时期训练您的数据,并在它平坦的时期进行测试。
请换一组数据试试。任何实际上都可以。
24 项是极小的样本,propeth 用于更大的数据和可能更多的变量。
尽管先知这个名字并不神奇,但它使用了各种相关技术,并且在小的记录集中,它与简单回归没有什么不同。
告诉我们进展如何
我正在尝试使用 fbprophet 添加额外的回归器进行实验,但它似乎并没有提高准确性。在一般情况下当然不能保证,但我已经将它归结为一个合成案例,看起来应该如此,但它仍然不是,所以我想知道我是否做错了什么。
这是输入数据:
ds,y
2011-01-01,8
2011-02-01,10
2011-03-01,10
2011-04-01,10
2011-05-01,9
2011-06-01,8
2011-07-01,6
2011-08-01,7
2011-09-01,9
2011-10-01,9
2011-11-01,10
2011-12-01,10
2012-01-01,20
2012-02-01,20
2012-03-01,20
2012-04-01,20
2012-05-01,20
2012-06-01,20
2012-07-01,20
2012-08-01,20
2012-09-01,20
2012-10-01,20
2012-11-01,20
2012-12-01,20
想法是第一年有点嘈杂,这不是第二年的真正指南,第二年所有值都定为 20。
这是我的代码:
import fbprophet
import pandas as pd
import sklearn.metrics
plain = pd.read_csv("data.csv")
plain_train = plain[plain.ds < "2012-01-01"]
plain_test = plain[plain.ds >= "2012-01-01"]
plain_m = fbprophet.Prophet()
plain_m.fit(plain_train)
plain_forecast = plain_m.predict(plain_test)
augmented = pd.read_csv("data.csv")
augmented["extra"] = [20.0] * 24
augmented_train = augmented[augmented.ds < "2012-01-01"]
augmented_test = augmented[augmented.ds >= "2012-01-01"]
augmented_m = fbprophet.Prophet()
augmented_m.add_regressor("extra")
augmented_m.fit(augmented_train)
augmented_forecast = augmented_m.predict(augmented_test)
print("plain_forecast")
print(
sklearn.metrics.mean_absolute_error(
plain_test["y"].values, plain_forecast["yhat"].values
)
)
print("augmented_forecast")
print(
sklearn.metrics.mean_absolute_error(
augmented_test["y"].values, augmented_forecast["yhat"].values
)
)
它首先对未扩充的数据尝试预测 运行,然后用始终为 20 的第二列进行扩充,因此这是数据将基于什么的完美指南,因此可能非常有帮助。
并且输出:
plain_forecast
11.072845254369435
augmented_forecast
11.072872701031054
数字不相同,所以没有完全忽略多余的列,但精度没有提高;虽然噪音水平有所下降,但还是稍微差了一点。
我错过了什么?
代码没有错。但是要记住几件事然后你会看到 fb 先知的不同
这个数据有问题。
在你的模型中,如果你想检查季节性+增长,你应该将年和月分成两个单独的变量。这将有助于任何算法理解每年都有增长,每个月都有季节性曲线。
您在可变数据波动的时期训练您的数据,并在它平坦的时期进行测试。
请换一组数据试试。任何实际上都可以。
24 项是极小的样本,propeth 用于更大的数据和可能更多的变量。
尽管先知这个名字并不神奇,但它使用了各种相关技术,并且在小的记录集中,它与简单回归没有什么不同。
告诉我们进展如何