Bonjour à tous,
Je cherche à trouver un algorithme qui me permettrait de trouver une fréquence standardisée (annuel, semi annuel, trimestrielle, mois, semaine) uniquement à partir d'une liste de dates.
Voici les hypothèses de départ:
- La liste de dates est de taille indéterminée mais pour commencer on peut imaginer qu'elle est de taille supérieure ou égale à la fréquence recherchée.
- La liste de dates est bruitée, il peut exister des doublons ainsi que des trous dans la série.
- Les dates sont ordonnées par ordre croissant.
De mon coté j'ai utilisé l'approche suivante:
L'idée générale :
- Je teste toute les fréquences et je calcule une note pour chacune d'entre elle.
- Je sélectionne ensuite la fréquence ayant la meilleure note.
Le calcul de la note se fait de la façon suivante:
1. Dans un premier temps je normalise les intervalles entre chaque date.
(Datei - Datei-1)/n (n étant la fréquence considérée 365, 182, 91, 12, 52)
2. Je cherche ensuite à placer le nombre de dates dans chaque intervalles normalisés.
J'obtiens un résultat de la forme
Intervalle 0 -> 1
Intervalle 1 -> 1
Intervalle 2 -> 2
Intervalle 3 -> 1
Intervalle 4 -> 0
Intervalle 5 -> 1
Intervalle 6 -> 0
Intervalle 7 -> 1
Intervalle 8 -> 0
Intervalle 9 -> 1
Intervalle 10 -> 1
Intervalle 11 -> 2
Intervalle 12 -> 1
Intervalle 13 -> 3
Intervalle 14 -> 0
Intervalle 15 -> 0
Intervalle 16 -> 0
Intervalle 17 -> 1
....
Dans le cas idéal, si il y a une date par intervalle pour chaque intervalle, je suis en présence d'une fréquence "parfaite".
Si j'ai deux dates par intervalle pour chaque intervalle, cela veut dire que ma fréquence est trop faible,
Si j'ai une séquence de type 1,0,0,1,0,0... , cela veut dire que ma fréquence est trop élevée.
Pour calculer la note, je calcule sur un nombre d'intervalle glissant n (par exemple n=12, correspondant à la fréquence Mois),
la moyenne et l'écart type pour chaque groupe d'intervalle [0,11],[1,12],[2,12]....
Je crée une fonction qui combine la moyenne et l'écart type ( Mean + sqrt(STD) ).
Si cette fonction est égale à 1, je suis dans le cas idéal.
Sinon plus la fonction est proche de 1, plus je me rapproche d'un séquence significative.
Je teste mon algo sur quelque séries de dates, je compare le résultat de l'algo avec ce que j'ai trouvé intuitivement en regardant les séries
et le résultat n'est pas vraiment concluant... j'ai 50% d'erreur environ.
Peut-être avez une idée à me suggérer pour améliorer la pertinence de mon algo.
Merci
-----