2017-08-28 2 views
0

Je veux faire une prévision naïve avec un ensemble de données que j'ai et je me bats un peu en le faisant.Prévisions Naive day-ahead

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 

Ce que j'ai fondamentalement, ce sont des données horaires où je veux comparer la dernière colonne concernant sa manifestation {0,1}. Puisque je veux comparer cette prévision naïve avec d'autres prédicteurs de jour en avant, je veux utiliser les données d'un jour avant (shift (24)) pour prédire la manifestation réelle. Prévisions Naive:

def naive_forecast(x): 
     return x 
    predictions = list() 
    for x in test_x: 
     yhat = naive_forecast(x) 
     predictions.append(yhat) 

Pour moi, il est très difficile de savoir comment faire le processus de cartographie. Cela signifie comment abandonner l'argument que pour les tests de classification binaire, je veux utiliser les données de 24 heures avant de les mapper sur les données maintenant pour l'ensemble de données itérativement. (https://en.wikipedia.org/wiki/Forecasting#Na.C3.AFve_approach)

Répondre

2

Cela va être très difficile de répondre sans une image plus claire de ce à quoi ressemble votre image originale. Quelles sont les colonnes et les lignes de valeurs?

Je vais essayer de répondre à votre question du mieux que je peux. Une prévision naïve est juste la valeur de la période précédente. En supposant que votre dataframe d'origine est configuré comme

index 'original' 
    time1  x1 
    time2  x2 
    time3  x3 

colonne de prédiction Naive sera juste les valeurs d'origine décalées aux indices de temps appropriés. Avec un exemple simple de df comme

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 

Le passage d'un jour:

naive_prediction = df.shift(1, freq=datetime.timedelta(days=1)) 
    naive_prediction.columns = ['naive_prediction'] 

Retours

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 

Maintenant, nous avons juste besoin merge ces deux dataframes, et la colonne naive_prediction va contenir les valeurs appropriées pour chaque position d'index.

final_df = df.merge(naive_prediction, how="outer", left_index=True, right_index=True) 

qui doit retourner un final_df de

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 

où la valeur de chaque position d'index est égal à la valeur initiale de la position de l'index précédent.