使用R语言预测百分比

我被指派解决一个涉及预测百分比的问题。我面临的主要问题是数据不足。我只有2.5年的数据(按周记录),需要预测今年剩余时间的百分比。

我所拥有的数据看起来类似于下面的示例:

    week  year    date          percentage1   1     2019    2019-03-31    0.10682   2     2019    2019-04-07    0.09543   3     2019    2019-04-14    0.08454   4     2019    2019-04-21    0.07135   5     2019    2019-04-28    0.07626   6     2019    2019-05-05    0.0671

这些百分比确实表现出一定的季节性特征,但通过一些探索性数据分析(EDA),还不足以将其归类为完全的季节性数据集。

我最初尝试使用LSTM/Keras序列模型,但未能成功。

我对任何可能适用于这种类型数据的方法都不熟悉,因此如果有人对如何最好地处理这项任务有任何想法,将不胜感激。


回答:

你可以从fable包及其环境开始。请注意,这只是一个示例,并且请记住,使用你提供的样本数据,结果可能不具有参考价值。

library(fable)library(tsibble)  # 转换为日期df$date <- as.Date(df$date, "%Y-%m-%d")# 转换为tsibble,这是一种对tsibble环境非常有用的数据框类型,它# 也非常有助于你有多个时间序列需要预测的情况df <- tsibble(df, index = date)# 将数据分为训练集和测试集:这将帮助你确定哪个模型适合预测,预测你已经知道的数据。train <- df[df$date <  as.Date('2019-04-21',"%Y-%m-%d"),]test  <- df[df$date >= as.Date('2019-04-21',"%Y-%m-%d"),]# 在这里进行预测,如果你的R不支持|>,请用%>%替代# (可能需要library(magrittr))training <- train |>               # 定义模型,你可以添加多个模型              model(arima   = ARIMA(percentage),                    croston = CROSTON(percentage))training    # A mable: 1 x 2           arima   croston         <model>   <model>1 <ARIMA(0,2,0)> <croston>forecasting <- training |>               # 预测未来3个时间点              forecast(h = 3)# 在这里查看你的结果(由于这些数据,结果可能不太有用)autoplot(forecasting) + autolayer(train)# 以及一些准确性指标accuracy(forecasting, test) # A tibble: 2 x 10  .model  .type       ME   RMSE    MAE   MPE  MAPE  MASE RMSSE   ACF1  <chr>   <chr>    <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>1 arima   Test   0.00883 0.0119 0.0104  12.4  14.6   NaN   NaN -0.1162 croston Test  -0.0184  0.0188 0.0184 -26.1  26.1   NaN   NaN -0.525

显然,你将为每个时间序列选择最佳模型(在这种情况下,是一个时间序列),并将其用于预测你需要的内容。

在这个简单的案例中,ARIMA(0,2,0)似乎是最好的选择,所以你可以做类似的事情,但你可以在指南中找到更好的预测方法:

df |> model(arima_0_2_0 = ARIMA(percentage ~ 0  + pdq(0,2,0))) |> forecast(h = 10)

一些模型允许你添加回归变量,因此如果需要,你可以尝试对“奇怪”的时期(如COVID封锁、节假日等)进行建模。


使用数据:

df <- read.table(text = 'week  year    date          percentage1   1     2019    2019-03-31    0.10682   2     2019    2019-04-07    0.09543   3     2019    2019-04-14    0.08454   4     2019    2019-04-21    0.07135   5     2019    2019-04-28    0.07626   6     2019    2019-05-05    0.0671', header = T)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注