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
Oh bien, merci. Je vais essayer de mon mieux – kafe1012