Comment prévoir le temps de la série dans scikit-learn?
Scikit-learn utilise une approche très pratique basée sur fit
et predict
méthodes. J'ai le temps de la série de données dans le format adapté pour fit
et predict
.
Par exemple j'ai le texte suivant Xs
:
[[1.0, 2.3, 4.5], [6.7, 2.7, 1.2], ..., [3.2, 4.7, 1.1]]
et le correspondant ys
:
[[1.0], [2.3], ..., [7.7]]
Ces données ont la signification suivante. Les valeurs stockées dans ys
forme d'une série chronologique. Les valeurs dans Xs
sont le temps correspondant à charge "facteurs" qui sont connus pour avoir une certaine influence sur les valeurs de ys
(par exemple: la température, l'humidité et la pression atmosphérique).
Maintenant, bien sûr, je peux utiliser fit(Xs,ys)
. Mais puis-je obtenir un modèle dans lequel les valeurs futures en ys
ne dépendent de facteurs et ne pas dependend sur la précédente Y
valeurs (au moins directement) et c'est une limitation du modèle. Je voudrais avoir un modèle dans lequel Y_n
dépend aussi de Y_{n-1}
et Y_{n-2}
et ainsi de suite. Par exemple je pourrais avoir besoin d'utiliser une moyenne mobile exponentielle comme un modèle. Quelle est la façon la plus élégante de le faire dans scikit-learn
AJOUTÉ
Comme il a été mentionné dans les commentaires, je peux prolonger Xs
en ajoutant ys
. Mais de cette façon, comporte certaines limites. Par exemple, si j'ajoute les 5 dernières valeurs de y
que 5 nouvelles colonnes à X
, les informations sur les délais de la commande de ys
est perdu. Par exemple, il n'y a pas d'indication dans les X
que les valeurs de la 5ème colonne suivante de la valeur dans la 4ème colonne et ainsi de suite. Comme un modèle, je souhaiterez avoir un ajustement linéaire des cinq dernières ys
et utilisez l'assistant fonction linéaire de faire une prédiction. Mais si j'ai 5 valeurs en 5 colonnes, il n'est pas si anodin.
AJOUTÉ 2
De faire de mon problème encore plus clair, je voudrais donner un exemple concret. Je voudrais avoir un "linéaire" modèle dans lequel y_n = c + k1*x1 + k2*x2 + k3*x3 + k4*EMOV_n
, où EMOV_n est juste une moyenne mobile exponentielle. Comment puis-je mettre en œuvre ce modèle simple dans scikit-learn?
- vous pouvez simplement ajouter
[np.nan] + ys[:-1]
comme l'un des facteurs - behzad.nouri, j'ai étendu ma question en réponse à votre commentaire.
- Je pense que la meilleure chose à faire est d'essayer plusieurs différents modèles simples, y compris ce que @behzad.nouri a suggéré, et l'utilisation de la validation croisée pour voir si un modèle fonctionne mieux que les autres et acquérir une intuition. Il serait peut-être temps que l'heure exacte de l'information n'est pas aussi important que vous le pensez. Je voudrais utiliser l'étendue Xs vecteur idée dans un réseau de neurones, et voir si cela a fonctionné. Dans cette approche, vous pourriez sorte de garder votre information en temps, même si le n de.n. serait une sorte de boîte noire.
- Vos données sont hébergées n'importe où? Pourrais-je le regarder?
- Malheureusement, la date ne sont pas hébergés, et l'exemple ci-dessus est juste un exemple (les données réelles ont une structure plus complexe).
- Il semble que vous essayez de faire un modèle autorégressif. Vous pouvez utiliser Statsmodels ARMA ou ARIMA paquets ou d'ajouter des points à votre ensemble de données liées aux précédentes points dans le temps.
- Salut, j'apprécierais si quelqu'un d'entre vous pouvait m'aider avec cela. stackoverflow.com/questions/40350460/...
Vous devez vous connecter pour publier un commentaire.
Ce pourrait être ce que vous cherchez, à l'égard de l'exponentielle de moyenne mobile pondérée:
Ici,
com
est un paramètre que vous pouvez lire sur ici. Ensuite, vous pouvez combinerEMOV_n
àXs
, en utilisant quelque chose comme:Et puis vous pouvez regarder les différents modèles linéaires, ici, et faire quelque chose comme:
Bonne chance!
Selon Wikipedia, EWMA fonctionne bien avec stationnaires de données, mais il ne fonctionne pas comme prévu dans la présence de tendances, ou à la saisonnalité. Dans ces cas, vous devez utiliser une deuxième ou de troisième ordre EWMA méthode, respectivement. J'ai décidé de regarder les pandas
ewma
fonction pour voir comment il a traité les tendances, et c'est ce que je suis venu avec:Comme vous pouvez le voir, l'EWMA dollars à la tendance à la montée et en descente. Nous pouvons corriger cela (sans avoir à mettre en œuvre un deuxième schéma d'ordre de nous-mêmes) en prenant de l'EWMA dans les deux directions, puis le calcul de la moyenne. J'espère que vos données ont été stationnaire!