2017-04-03 30 views
4

私はrandomforestを使って時系列解析をしようとしています。 PFB私のコードRのランダムフォレストを使った時系列予測

Subsales<-read.csv('Sales.csv') 
head(Subsales) 

サンプルデータ:

Date    SKU       City Sales 
     <date>        <chr> <chr> <dbl> 
1 2014-08-11 Vaseline Petroleum Jelly Pure 60 ml Jeddah1 378 
2 2014-08-18 Vaseline Petroleum Jelly Pure 60 ml Jeddah1 348 
3 2014-08-25 Vaseline Petroleum Jelly Pure 60 ml Jeddah1 314 
4 2014-09-01 Vaseline Petroleum Jelly Pure 60 ml Jeddah1 324 
5 2014-09-08 Vaseline Petroleum Jelly Pure 60 ml Jeddah1 352 
6 2014-09-15 Vaseline Petroleum Jelly Pure 60 ml Jeddah1 453 


####Length of training & testing set Splitting it 80-20#### 

train_len=round(nrow(SubSales)*0.8) 
test_len=nrow(SubSales) 



######Splitting dataset into training and testing##### 

#### Training Set 
training<-slice(SubSales,1:train_len) 
#### Testing Set 
testing<-slice(SubSales,train_len+1:test_len) 

training=training[c(1,4)] 
testing=testing[c(1,4)] 

library(randomForest) 
set.seed(1234) 
regressor = randomForest(formula=Sales~., 
       data=training, 
       ntree=100) 

y_pred = predict(regressor,newdata = testing) 

私はテストデータset.Allに予測機能を使用する場合、私は静止した結果を取得していますが値は369、私は別のために試してみたされている予測しますデータセット私は同じ結果を得ました。誰でも私がここで間違っていることを教えてもらえますか?

+0

販売を予測するものは何ですか?現時点では、日付と1つのレベルを持つ2つの要因(製品と都市)のみが表示されます。フィーチャー・エンジニアリングから始めましょう。たとえば、日付から曜日を抽出し、それを7レベルの要素として含めるようにしてください。 – JanLauGe

+0

'slice 'がどこから来たのかわからないと、' training'と 'testing'データセットは2つの値に制限されているようです。おそらく、最初の列と第4列の 'training = training [、c(1,4)]を選択するためのカンマがないかもしれません。 – nya

+0

'test <-slice(SubSales、(train_len + 1):test_len)'を試して、括弧try <1 + 2:5'の効果を見て、期待した結果と比較してください。かっこなしでは、2つのスライスは本質的に分離の目的を打ち負かして重複します。そのようなタスクの 'caret'パッケージから' createDataPartition'関数を強くお勧めします。 – OdeToMyFiddle

答えて

4

あなたの質問を言い換えて、あなたがしたいことを正確に理解するようにしましょう。

製品の1日あたりの売上高は、将来の日付の関数として販売を予測したいと考えています。お客様の数、広告に費やされた金額など、予測変数はありません。私は期待どおりにランダムフォレストが動作していると思う

Date  Sales 
2014-08-11 378 
2014-08-18 348 
2014-08-25 314 
2014-09-01 324 
2014-09-08 352 
2014-09-15 453 
... 

:あなたの入力データは、次のようになります。ランダムフォレストは、入力変数x(予測子)を指定してy(応答、ここでは:Sales)を予測しようとする教師付き機械学習アルゴリズムです。ここでは、あなたが提供するxのみが日付です。しかし、各日付はランダムなフォレストに対して完全に新しいものであり、アルゴリズムはその日のあなたの製品の売上が平均であると推測することしかできません。

オプション1)のみ予測因子としての日付を使用してのあなたのアプローチとスティック:

は、2つのオプションがあります。別の方法、おそらくARIMAなどの自己回帰アプローチが必要になります。このアプローチは、データの傾向を検出しようとします。売上は多かれ少なかれ静的か、成長しているか、または下がっていますか?毎週のトレンド、毎月のトレンド、年間トレンドはありますか? here

オプション2)データ収集と機能エンジニアリングを使用して、RandomForestが新しい日付の値を予測するのに役立つ機能を作成します。たとえば、特定の日に何人の顧客が店に来たかに関するデータを取得したり、曜日(月曜日、火曜日など)を抽出して別の変数として保持してみてください。 Rパッケージの潤滑剤がこれを行うのに役立ちます。以下の簡単な例:

library(lubridate) 
Subsales <- mutate(Subsales, Weekday = wday(Date, label = TRUE)) 

+0

ありがとう、これは助けます。私はランダムな森林がどのように働くかを知らなかった。私はすでにArimaとHoltsWinterを使ってTSを完成させています。もしRandomForestを使うことができれば、私は試していました。私は間違いをしていると思ったので、私は固定値を得ているのです。おかげで再び乾杯 –

関連する問題