Prévoir une évolution à partir de courbes

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je possède un nombre considérable de données de production laitière de vaches (production quotidienne sur plusieurs années de chaque bête) et je souhaiterais prévoir la production dans un futur proche (disons pour le mois suivant).

Pour l'instant, j'ai tracé des courbes (pour l'instant, pour une seule bête) afin de me rendre compte de la tendance. Globalement :

  • 0 : Vêlage
  • [0, 50] : Augmentation de la production
  • [50, 300] : Baisse de la production
  • 300 : tarissement en vue d'un autre vêlage

Je me demandais comment je pourrais m'y prendre pour faire des estimations de production. Faut-il que je modélise la courbe (interpolation de Lagrange ?) ? Que faire des écarts ?

Comme je possède des données pour chaque animal, je me disais que je pourrais générer un modèle pour chaque vache, plutôt que de faire la moyenne du troupeau.

Merci. =)

+0 -0
Staff

Salut,

Une interpolation de Lagrange, c'est bien pour interpoler, mais pas pour extrapoler. Ça fait n'importe quoi en dehors des points de données.

Dans ton cas, et vu que tu as une très bonne granularité de données, je verrais bien une transfo de Fourier pour avoir des infos sur les fréquences des oscillations et leurs amplitudes associées. Ça peut donner une idée pas trop mauvaise des tendances sur le long terme (avec les grandes fréquences) et du bruit sur court terme (et son intensité associée).

I don't mind that you think slowly, but I do mind that you are publishing faster. – W. Pauli

+1 -0
Staff

Une transfo de Fourier ça paraît très naturel vu la situation, même si je fais pas de modélisation je soutiens @dri1 sur ce point (quoi que ça vaille :p). (Et puis entre nous, la théorie de la représentation yummyummyum pour un TIPE.)

Ce n’est pas en répétant « Hom, Hom », qu’on démontre des théorèmes sérieux - Siegel Mon Twitter

+0 -0
Staff

Sinon, en me baladant sur le Web, j'ai croisé le machine learning, plus particulièrement sur scikit-learn. Pourrait-ce être une solution ?

Vayel

C'est un peu sortir le bulldozer. De ce que je peux voir, il s'agit carrément d'un kit d'analyse de données. D'une part, tu n'as pas besoin d'aller chercher aussi loin, d'autre part c'est le genre d'outils destiné aux gens qui savent très bien ce qu'il font. Ce serait bête de faire une analyse, qui semble donner des résultats pas trop mauvais, et au final faire un non sens parce qu'on a effectué une analyse qui n'a absolument pas lieu d'être. ^^

En faisant une analyse spectrale via la transfo de Fourier, tu es sûr d'avoir quelque chose de représentatif de tes données, et d'avoir une idée pas trop mauvaise de ce qui peut se passer dans le futur. Le seul problème que je vois avec la FT, c'est surtout que tu risques d'introduire artificiellement des oscillations à basses fréquence (au passage, je me suis trompé plus haut, c'est évidemment les basses fréquences qui donnent la tendance sur le long terme). Parce que tu as des données sur à peine un an, imaginons un graphe où on voit par exemple une baisse de la moyenne glissante de la production. En faisant une FT, tu vas te retrouver avec une oscillation d'une période de 4 ans, qui n'a évidemment pas beaucoup de sens vu que tu n'as des données que sur un an. C'est pas forcément un problème énorme, mais il faut en être conscient.

Édité par adri1

I don't mind that you think slowly, but I do mind that you are publishing faster. – W. Pauli

+0 -0
Staff

Comment ça pas judicieux ? J'adore l'idée de faire une transfo de Fourier sur des vaches =D. En plus si tu passes du temps sur la théorie de la représentation ça peut être très sympa

Ce n’est pas en répétant « Hom, Hom », qu’on démontre des théorèmes sérieux - Siegel Mon Twitter

+1 -0
Staff

Hmmm… Je connais mal scipy, mais de ce que je peux voir de la doc, tu devrais plutôt utiliser la transfo réelle rfft (qui a priori va te renvoyer seulement les fréquences positives).

Par ailleurs, ta fréquence n'est probablement pas en Hz, mais en $\mathrm{jour}^{-1}$. Trace le spectre rfft, on t'aidera à l'analyser après.

I don't mind that you think slowly, but I do mind that you are publishing faster. – W. Pauli

+0 -0
Auteur du sujet

J'obtiens la même chose. Mais il semblerait que la différence vient uniquement du type d'entrée. Comme les miennes sont réelles, ça revient au même.

Après, je ne suis pas obligé d'utiliser scipy.

Merci. =)

Edit : en fait, ça change un peu. Le décalage vient de np.fft.fftshift().

Édité par Vayel

+0 -0

Je suis ptet sans aucun rapport, mais dans le monde de l'acheminement/logistique (supply chain si c'est plus clair) ils utilisent des modèles statistiques pour faire leurs prévisions de ventes en fonctions des années précédentes, de l'impact d'une future promotion etc tout cela pour automatiser la commande de matière premières. Ca a l'air assez fiable comme méthode de prévision si tes données sont assez récurrentes…

Cherche "statistique modèle Lewandowski" (pas le joueur de foot hein !) ou des mots-clés du genre.

ZdS, le best du Zeste ! Tuto Arduino, blog, etc

+0 -0
Staff

Pour une prévision moyen terme, un filtre de Kalman ne serait pas idiot. Il t'apportait une estimation raisonnable des prochains jours avec la marge d'erreur associé.

Pour le long terme il faudrait regarder l'évolution de plusieurs vaches pour voir si un modèle apparait de manière constante. Il serait alors plus facile de le faire correspondre.

Scikit-learn est vraiment facile à prendre en main, la documentation est excellente et la communauté est assez importante.

Le plus important dans un premier temps est que tu ai des données. Récupère ce genre de données pour le maximum de bêtes. Ensuite tu va séparer ton jeu de données en deux : celles pour l'apprentissages et celles pour le test. L'idée est de n'utiliser que celles du premier groupe pour apprendre ton modèle et ensuite vérifier que ce modèle est correct sur le deuxième. Cela te permet de vérifier la généralisation de ton modèle. Si tu utilise les mêmes données pour apprendre que pour tester, tu risque le sur-apprentissage et d'avoir des modèles qui ne collent qu'aux données que tu a utilisées.

+0 -0
Auteur du sujet

Merci !

Eskimon, ton lascar est introuvable.

Pour résumer, les pistes à explorer :

  • Transformée de Fourier
  • Filtre de Kalman
  • Scikit-learn

Je vais commencer par la première je pense, si vous voulez bien m'aider à y comprendre quelque chose. ^^

Edit : pour ceux que ça intéresse, j'ai déniché ça sur la transformée de Fourier.

Édité par Vayel

+0 -0
Auteur du sujet

J'ai généré des galeries, pour mieux y voir.

Pour le machine learning Kje, ça signifie que je ne pourrai pas travailler animal par animal i.e. me baser sur les données de cette bête des années précédentes pour prévoir la production future de cette vache. Après, pas sûr que ce soit grave.

+0 -0

Je ne comprends pas comment on peut parler d'analyse de fourrier pour un problème de prédiction…

Renseigne toi plutôt du côté de modèle linéaire gaussien et de l'ANOVA ou extentions type ARMA pour des modélisations non linéaires.

http://www.eleves.ens.fr/home/daviaud/notes_de_cours_stat.pdf http://cermics.enpc.fr/scilab_new/site/Tp/Statistique/modele-lineaire/modele-lineaire.html

Édité par KFC

+1 -0
Auteur du sujet

Mes profs de prépa ont confirmé le bien-fondé de l'emploi d'ARMA ainsi que de régressions. Je suis néanmoins curieux par rapport à la transformée de Fourier. Dans les grandes lignes, que permettrait-elle de faire ?

Il existe par contre tout un tas de régressions. Vers quoi serait-il judicieux de s'orienter ?

Merci !

+0 -0
Staff

Dans les grandes lignes, que permettrait-elle de faire ?

D'analyser le comportement fréquentiel et de découper les différentes parties du signal. En gros sur un signal, les basses fréquences te donneront les variations long terme tandis que les hautes fréquences te donneront les variations locales. Ça peut etre utile de la calculer pour ton analyse et par exemple voir la tendance de fond sans tous les bruits parasites. Mais ce n'est pas du tout adapté pour conjecturer de l'évolution.

Pour choisir les regressions, j'ai envie de dire "test". Utilise un truc comme sklearn qui propose pas mal de regressions dispo facilement, des methodes pour les adapter et des outils pour évaluer leur performance. Ça te fera gagner du temps.

+0 -0
Staff

La transformée de Fourier peut se voir sous l'angle analyse-synthèse :

  • analyse des harmoniques : on trouve des coefficients pour chaque fréquence (les coefs de Fourier) ;
  • synthèse où l'on reconstitue le signal à partir des coefficients.

Concrètement, d'un signal périodique on en tire une somme infinie de sin et cos à des fréquences entières dont les coefficients multiplicatifs sont propres au signal.

Ce n’est pas en répétant « Hom, Hom », qu’on démontre des théorèmes sérieux - Siegel Mon Twitter

+0 -0

C'est ce que fait grosso-modo ARMA. En fouillant bien on pourrait certainement relier des éléments d'analyse harmonique avec des éléments de ce type de méthodes.

En statistique on parle plus de moyenne mobile. En gros, on commence pas « débruiter », on parle de supprimer les variations saisonnières, avec l'usage de moyenne mobile qui sont grosso-modo en réalité une convolution, que tu peux voir comme une distribution régularisante, comme du traitement du signal puisque physiquement c'est un filtre passe-bas, etc. Tout est relié évidemment, mais je pense qu'il faut vraiment partir dans de la documentation et le vocabulaire relatif au domaine qu'on aborde, ne serait-ce que pour éviter de réinventer la roue et d'être plus complet. Pour preuve, vous proposez une régularisation mais ce n'est qu'une partie de ARMA (le MA).

Édité par KFC

+0 -0
Auteur du sujet

Merci à vous !

J'expérimente en parallèle ARMA et la régression et je regarde ce que ça donne. =)

Pour les bibliothèques, mon prof d'info a déniché ça. J'ignore si c'est préférable à sklearn ou non.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte