1

En essayant de prédire l'avenir Bitcoin prix, je suis tombé dans la situation suivante:Comment prédire une série chronologique multidimensionnelle en utilisant python, sklearn avec des valeurs X inconnu

Je ne peux pas prédire le label y (par exemple Open Prix) en fournissant toutes les caractéristiques X que j'ai utilisées pour former mon modèle. Cependant, ce dont j'ai besoin, c'est d'une prédiction dans le futur, ce qui signifie que mes valeurs de caractéristiques X sont également inconnues.

Voici un extrait de mes données (6 colonnes de fonction, 1 étiquette):

    Open High  Low HL-PCT PCT-change \ 

2016-01-01 00:00:00 430,89 432,58 429,82 0,642129 -0,030161
2016-01-01 01:00:00 431,51 432,01 429,08 0,682856 0,348829
2016-01-01 02:00:00 430,00 431,69 430,00 0,393023 -0,132383
2016-01-01 03:00:00 430,50 433,37 430,03 0,776690 -0,662252
2016- 01-01 04:00:00 433.34 435.72 432.55 0.732863 -0.406794
201 6-01-01 05:00:00 435,11 436,00 434,47 0,352153 -0,066605
2016-01-01 06:00:00 435,44 435,44 430,08 1,246280 0,440569
2016-01-01 07:00:00 434,71 436,00 433.50 0,576701 0,126681
2016-01-01 08:00:00 433,82 434,19 431,00 0,740139 -0,059897
2016-01-01 09:00:00 433,99 433,99 431,23 0,640030 0,460648

    Volume (BTC) Label 

2016-01-01 00:00 : 00 41.32 434.87
2016-01-01 01:00:00 31.21 434.44
2016-01-01 02:00:00 12.25 433.47
2016-01-01 03:00:00 74,98 431,80
2016-01-01 04:00:00 870,80 433,28
2016-01-01 05:00:00 78,53 433,31
2016-01-01 06 : 00: 00 177,11 433,39
2016-01-01 07:00:00 158,45 432,61
2016-01-01 08:00:00 210,59 432,80
2016-01-01 09:00:00 129,68 432,17

Voici mon code:

#First get my own data 
symbols = ["bitstamp_hourly_2016"] 
timestamp = pd.date_range(start='2016-01-01 00:00', end='2016-12-23 09:00', 
         freq='1h', periods=None) 

df_all = bf.get_data2(symbols, timestamp)  
#Feature Slicing 
df = df_all[['Open', 'High', 'Low', 'Close', 'Volume (BTC)']]  

df.loc[:,'HL-PCT'] = (df['High'] - df['Low'])/df['Low']*100.0 
df.loc[:,'PCT-change'] = (df['Open'] - df['Close'])/df['Close']*100.0 

#only relevant features 
df= df[['Open','High', 'Low', 'HL-PCT', 'PCT-change', 'Volume (BTC)']] 

df.fillna(-99999, inplace=True) 

#cut off the last 24 hours 
forecast_out = int(math.ceil(0.0027*len(df))) 

forecast_col = 'Open' 
df['Label'] = df[forecast_col].shift(-forecast_out) 

#X Features and y Label 
X = np.array(df.drop(['Label'],1)) 
X = preprocessing.scale(X) 

#Last 24 hours 
X_lately = X[-forecast_out:] 
X = X[:-forecast_out] 
y = np.array(df['Label']) 
y = y[:-forecast_out] 

#Train and Test set 
test_size= int(math.ceil(0.3*len(df))) 
X_train, y_train = X[:-test_size], y[:-test_size] 
X_test, y_test= X[-test_size:], y[-test_size:] 

#use linear regression 
clf = LinearRegression(n_jobs=-1) 
clf.fit(X_train, y_train) 

#BIG QUESTION: WHAT TO INSERT HERE TO GET THE REAL FUTURE VALUES 
prediction = clf.predict(X_lately) 

# The coefficients 
print('Coefficients: \n', clf.coef_) 
# The mean squared error 
print("Mean squared error: %.4f" 
     % np.mean((clf.predict(X_test) - y_test) ** 2)) 
# Explained variance score: 1 is perfect prediction 
print('Variance score: %.4f' % clf.score(X_test, y_test)) 

Résultat:

How many Hours were predicted: 24 
Coefficients: [ 5.30676009e+00 1.05641430e+02 1.44632212e+01  1.47255264e+00 
-1.52247332e+00 -6.26777634e-03] 
Mean squared error: 133.4017 
Variance score: 0.9717 

Ce que je veux faire est: Donnez juste une nouvelle date, utilisez le modèle formé et ses connaissances du passé pour me donner un résultat raisonnable pour permet de dire que les prochaines 24 heures (le futur réel, pour lequel je n'ai pas de données). Jusqu'à présent, je ne peux travailler qu'avec des données passées sur clf.predict().

Cela devrait être possible en quelque sorte avec la ligne Régression, mais comment? Je pourrais aussi simplement utiliser la Date comme cadre de données X, mais cela ne rendrait-il pas mon modèle inutile?

Merci

Répondre

0

Si vous voulez coller à la régression linéaire et non en utilisant simplement la date, vous pouvez essayer de prédire (avec ce modèle qui vous plaît) régresseurs de votre modèle, puis effectuer la régression linéaire avec les prévisions valeurs.

Quoi qu'il en soit, il semble que le type de conseils dont vous avez besoin est pas liés à la programmation, je pense que votre question est plus approprié pour https://stats.stackexchange.com/

+0

Oh bien, merci. Je vais essayer de mon mieux – kafe1012