2013-06-24 3 views
1

J'essaie de prédire les cours des actions en utilisant sklearn. Je suis nouveau à la prédiction. J'ai essayé l'exemple de sklearn pour la prédiction de stock avec gaussian hmm. Mais prédire donne une séquence d'états qui se superpose sur le prix et prend également des points à partir du prix de clôture d'entrée donné. Ma question est de savoir comment générer les 10 prochains prix?comment prédire avec gaussianhmm sklearn

Répondre

0

Vous utiliserez toujours le dernier état de prédire l'état suivant, donc nous allons ajouter 10 jours de dollars d'entrées en changeant la date de fin au 23:

date2 = datetime.date(2012, 1, 23) 

Vous pouvez vérifier l'ensemble du code pour m'assurer que je n'utilise pas réellement les futures données pour la prédiction. Le reste de ces lignes peut être ajouté au bas du fichier. Nous voulons d'abord savoir quel est le rendement attendu pour un état donné. Le tableau model.means_ a des retours, les deux étaient les retours qui nous ont amené à cet état, pas les retours futurs qui sont ce que vous voulez. Pour obtenir les rendements futurs, nous considérons la probabilité d'aller à l'un des 5 états, et ce que le retour de ces états est. Nous obtenons la probabilité d'aller à un état particulier à partir de la matrice model.transmat_, pour le retour de chaque état, nous utilisons les valeurs de model.means_. Nous prenons le produit scalaire pour obtenir le rendement attendu pour un état particulier. Ensuite, nous supprimons les données de volume (vous pouvez les laisser si vous le souhaitez, mais vous sembliez être le plus intéressé par les prix futurs).

expected_returns_and_volumes = np.dot(model.transmat_, model.means_) 
returns_and_volumes_columnwise = zip(*expected_returns_and_volumes) 
returns = returns_and_volumes_columnwise[0] 

Si vous imprimez la valeur pour les retours [0], vous verrez le rendement attendu en dollars pour l'état 0, le rendement [1] pour l'état 1, etc. Maintenant, étant donné un jour et un état, nous vouloir prédire le prix pour demain. Vous avez dit 10 jours, alors utilisons-le pour N.

predicted_prices = [] 
lastN = 10 
for idx in xrange(lastN): 
    state = hidden_states[-lastN+idx] 
    current_price = quotes[-lastN+idx][2] 
    current_date = datetime.date.fromordinal(dates[-lastN+idx]) 
    predicted_date = current_date + datetime.timedelta(days=1) 
    predicted_prices.append((predicted_date, current_price + returns[state])) 

print(predicted_prices) 

Si vous étiez en cours d'exécution dans cette « production » vous définissez date2 à la dernière date à laquelle vous avez et lastn serait 1. Notez que je ne prends pas en compte les week-ends pour le predicted_date.

Ceci est un exercice amusant mais vous ne l'exécuteriez probablement pas en production, d'où les citations. Premièrement, la série chronologique est le prix brut; cela devrait vraiment être des retours en pourcentage ou des retours de log. De plus, il n'y a aucune justification pour choisir 5 états pour le HMM, ou qu'un HMM est même bon pour ce genre de problème, dont je doute. Ils l'ont probablement choisi comme exemple. Je pense que l'autre exemple de sklearn utilisant PCA est beaucoup plus intéressant.

Questions connexes