Inscription / Connexion Nouveau Sujet
Niveau autre
Partager :

Lissage de données sur l'année

Posté par
josse34
07-11-13 à 17:01

Bonjour!
Voici un problème qui je pense est très intéressant: , voici les données d'entrée dont nous disposons :

-> Une valeur pour chaque mois de l'année :

Janvier = 60
Février = 80
Mars = 130
Avril = 150
Mai = 180
Juin = 200
Juillet = 210
Aout = 170
Septembre = 140
Octobre = 90
Novembre = 60
Decembre = 50

-> Le nombre de jour par mois.


Pour connaitre la valeur chaque jour, je peux prendre Mars par exemple et le diviser par le nombre de jours dans le mois, soit 130 / 30 = 4,33.
Pour Février : 80 / 29 = 2,76.

Néanmoins je sais que ces valeurs de 2,76 et 4,33 concerne la moyenne en milieu du mois, je considère donc le 15 Février et 15 Mars.

Ainsi avec cette méthode simpliste, le 29 Février je suis à 2,76 tandis que je lendemain (1er Mars) je saute à 4,33 soit prés du double me créant une "marche".

Je souhaite donc lisser (par une formule mathématique) de façon journalière ces données mensuelles mais je dois respecter absolument la valeur du 15 de chaque mois (Février 2.76 et Mars 4.33) et surtout la somme mensuelle (Février 80 et Mars 130).
En gros en expliquant graphiquement, passer de barres (série 1) à une spline (série 2).
Lissage de données sur l\'année


Mon explication est elle compréhensible?

Merci pour votre aide!

édit Océane : forum modifié

Posté par
josse34
re : Lissage de données sur l'année 07-11-13 à 19:59

Bonsoir!
Toutes mes excuses et très honnêtement, je suis en train de me noyer tout seul!
Je tourne en rond depuis des jours sur ce problème et me demande si il existe une solution!

Je repose le problème d'une façon plus simple :

-> je connais seulement un valeur mensuelle comme ceci :
Janvier = 60
Février = 80
Mars = 130
Avril = 150
Mai = 180
Juin = 200
Juillet = 210
Aout = 170
Septembre = 140
Octobre = 90
Novembre = 60
Decembre = 50

Comment en déduire une valeur journalière tout en conservant strictement la valeur mensuelle (somme des valeurs journalières = valeur mensuelle).
En gros actuellement j'ai quelque chose qui ressemble à ça et souhaite obtenir le graph du dessous :
Lissage de données sur l\'année

Désolé pour ces revirements mais je compte beaucoup sur votre aide pour éviter d'exploser!!!!!!

Grand merci!

Posté par
Dwarliz
re : Lissage de données sur l'année 08-11-13 à 00:04

Salut !

Je suis bien loin d'être calé dans le domaine, mais à vu de nez, je partirai sur une formule de Simpson composite. - je raconte peut-être n'importe quoi, je te conseil d'attendre l'avis d'une personne meilleure que moi -

f représente ta fonction "en escalier" de départ, et P la fonction par laquelle tu l'approximes. [a,b] sera l'intervalle pour chacune de tes marches.

Lissage de données sur l\'année

Posté par
LeDino
re : Lissage de données sur l'année 08-11-13 à 04:58

En première approximation, et très simple à réaliser sur tableur, prendre simplement la moyenne mobile centrée sur chaque jour.
Il suffit de placer les 365 jours de l'année avec la valeur mensuelle en colonne, et de calculer la colonne suivante avec chaque cellule égale à la moyenne des trente cellules de gauche (15 avant et 15 après).

Reste ensuite à faire une règle de trois pour transformer ces données en valeurs journalières.

Ca lisse la courbe, sans respecter les totaux mensuels, ni marquer un pallier pour le mois maximum.
Mais ça prend deux minutes à réaliser...

Posté par
josse34
re : Lissage de données sur l'année 08-11-13 à 11:25

Bonjour!
Merci Dwarliz et LeDino, bien que la formule de l'un me fait peur!!!!!

Concernant les jours, il est certainement plus simple d'oublier le bissextile et de partir sur une base composée de numéros de jours fixes avec intervalles tout aussi fixes :
Janvier - 31 jours - du jour 1 au jour 31
Février - 28 jours - du jour 32 au jour 59
Mars - 31 jours - du jour 60 au jour 90
Avril - 30 jours - du jour 91 au jour 120
Mai - 31 jours - du jour 121 au jour 151
Juin - 30 jours - du jour 152 au jour 181
Juillet - 31 jours - du jour 182 au jour 212
Août - 31 jours - du jour 213 au jour 243
Septembre - 30 jours - du jour 244 au jour 273
Octobre - 31 jours - du jour 274 au jour 304
Novembre - 30 jours - du jour 305 au jour 334
Décembre - 31 jours - du jour 335 au jour 365

Voici une base excel de travail : , la colonne A désigne les numéros de jours. La colonne B en orange les mois, la colonne C en jaune les valeurs mensuelles à respecter strictement, et en colonne D les valeurs journalières obtenues basiquement par division de la valeur mensuelle par le nombre de jours du mois.

Je veux donc éviter ce genre de marche entre les jours 59 et 60 passant de 2.85 à 4.19, lisser chaque jour tout en respectant la somme mensuelle.

Qu'en pensez vous?

Merci!!!!!

Posté par
bbomaths
re : Lissage de données sur l'année 08-11-13 à 12:16

Bonjour.


Je vous invite à regarder le lissage de courbes par la méthode Savitzky-Golay.

A+

Posté par
josse34
re : Lissage de données sur l'année 08-11-13 à 13:15

Bonjour!

Cela semble être aussi intéressant que la spline ou la loi de simpson mais je suis absolument incapable de la mettre en oeuvre dans un excel, HTML ou PHP!!
Avez vous des exemples à me conseiller?
Merci!

Posté par
bbomaths
re : Lissage de données sur l'année 08-11-13 à 13:45


à voir http://jonsson.eu/programs/cweb/sgfilter/ dont [4]

A+

Posté par
josse34
re : Lissage de données sur l'année 08-11-13 à 14:49

Merci bbomaths pour ton aide et ce lien, mais je ne comprends pas le lien [4] vers un wiki?!

Quant au programme, c'est pour MAC, en tout état de cause, on fonce vers quelque chose qui me dépasse de loin, n'y a t'il rien de plus simple à mettre en oeuvre (sur le fichier EXCEL par exemple)?

Grand merci

Posté par
Dwarliz
re : Lissage de données sur l'année 08-11-13 à 20:23

Par curiosité, josse34, quel est ton niveau scolaire en maths (Collège/Lycée/Prépa/Bac+5/ect) ?
Et en informatique (Débutant/Amateur/Confirmé/Pro) ?

Déjà, il faudrait dans un premier temps oublié la notion de mois.
Tu as une fonction f (continue) qui fonctionne par palier, et dont on va admettre qu'on ne connait pas d'expression simple.
Ce qui t'intéresse sur cette fonction f, c'est de la "lisser", en ne gardant que certaines valeurs :
par exemple, tu veux que f(45) = 2,46   - Note : 45 représente le 45ème jour de l'année, soit le 14 Février, soit le milieu de ce mois -

Maintenant, tu cherches à construire une fonction P (continue), telle que P passe par tous les points que tu as défini :
par exemple, tu veux que P(45) = 2,46 aussi.

Et bien, le formule de Simpson te donne une fonction P telle que tu cherches. Et la formule de Simpson composite est similaire, mais un peu plus précise ( un peu plus compliquée aussi, mais on a rien sans rien )

Et donc, avec ces informations, je te conseil de relire mon 1er post.

Exemple : pour le 1er intervalle -> a = 15 (le 15 Janvier), b = 74 (le 15 Mars), f(a) = 60/31 = 1,94, f(b) = 4,33, m = 45 (le 14 Février), f(m) = 2.46

Maintenant tu n'as plus qu'a remplacer dans la formule

PS : en gros tu prends les milieux de tes mois 3 par 3, a c'est le milieu du 1er mois, b le milieu du 3ème, et m le milieu de 2nd mois.

Posté par
josse34
re : Lissage de données sur l'année 09-11-13 à 11:36

Merci Dwarliz, cela me semble clair.
J'ai un BTS (donc mathématique léger et davantage tourné vers la physique électrique) et je suis entre amateur et confirmé en informatique.

Autant te dire que les maths ne sont pas mes copains mais malgré mes carences, je ne leur tourne pas le dos!

Actuellement, ma difficultés est de transcrire ta formule en informatique, sur tableur par exemple puis en PHP.
Autant je connais assez bien excel, autant je ne l'ai jamais utilisé pour des maths comme ceci, et donc ne sais pas établir un tableau + graphique selon une formule.

J'ai hâte de tester!

Merci pour ton aide précieuse!!

Posté par
Dwarliz
re : Lissage de données sur l'année 09-11-13 à 20:27

J'ai commencé le boulot pour toi : http://cjoint.com/?0KjuzP9rlCn
Tu n'as plus qu'à compléter en suivant le modèle

Upload le quand tu as fini, que j'y jette un coup d'œil stp.

Posté par
LeDino
re : Lissage de données sur l'année 09-11-13 à 23:19

La contrainte "atteint le palier mensuel au milieu du mois"...
... est relativement antagoniste avec la contrainte de respect des totaux mensuels.
Cette contradiction obligera souvent la fonction de lissage à des "contorsions" peu compatibles avec les objectifs habituels du lissage (recherche de la meilleure régularité...)...

Ce serait bien de préciser les contraintes EXACTES, et les raisons qui les motivent.
Est-il indispensable que la courbe passe par le milieu du palier ?
Est-il indispensable que le total mensuel soit respecté ?
Quelle est l'utilisation de la courbe lissée ? ... une modélisation ? ... une reconstitution de la courbe journalière la plus "vraisemblable ?

Les conditions aux bords sont également importantes à préciser... Si l'on connaît la courbe pour le mois de décembre précédent, cela peut avoir une incidence sur le lissage...

Posté par
josse34
re : Lissage de données sur l'année 10-11-13 à 12:13

Bonjour Dwarliz!

Merci pour le boulot, je viens de le terminer : http://cjoint.com/?CKkmhjwz82v

J'ai quelques soucis avec le mois de janvier avec une somme de 143 au lieu de 60, néanmoins bien que cela soit un peu fastidieux et imprécis, la courbe à une bonne allure!

LeDino, la seule contrainte à respecter est cette somme mensuelle, le reste n'est pas important et faisait partie de ma démarche erronée.
Ainsi, il n'est pas du tout indispensable que la courbe passe par le milieu du palier mais indispensable de respecter strictement les totaux mensuelles par une courbe la plus lissée possible.
Quant à la connexion entre les années (décembre à janvier) on prends en compte une seule année type qui sera toujours sous ces conditions (mois de février à 28 jours sinon trop compliqué, enfin à moins que vous arriviez à le faire!!).

Merci à vous!!!!

Posté par
Dwarliz
re : Lissage de données sur l'année 10-11-13 à 12:48

Salut !

Fastidieux, oui en effet... mais imprécis ? pas du tout ! Qu'est-ce qui te faire dire que c'est imprécis ?

Posté par
josse34
re : Lissage de données sur l'année 10-11-13 à 12:58

En effet, imprécis est un terme un peu fort pour désigner une erreur de 2.58% systématique, sachant en plus que je n'arrive pas à maîtriser la connexion entre les années de la fin du mois de décembre au début du mois de janvier.

En tout état de cause, on m'a suggéré un modèle qui fonctionne parfaitement :
a0+a1*cos((2*PI*t)/365)+a2*cos(2*((2*PI*t)/365))+a3*cos(3*((2*PI*t)/365))+a4*cos(4*((2*PI*t)/365))+a5*cos(2*((5*PI*t)/365))+b1*sin((2*PI*t)/365)+b2*sin(2*((2*PI*t)/365))+b3*sin(3*((2*PI*t)/365))+b4*sin(4*((2*PI*t)/365))+b5*sin(5*((2*PI*t)/365))+b6*sin(6*((2*PI*t)/365))

t étant le numéro de jour et les coefficients a0, a1, a2, a3, a4, a5, b1, b2, b3, b4, b5, b6 obtenus par équation à 12 inconnus que je n'arrive pas à déterminer simplement.

Par ailleurs, les COS et SIN sont ils placés en fonction de la phase montante ou descendante du mois?

Qu'en pensez vous?

Grand merci et bonne journée.

Posté par
Dwarliz
re : Lissage de données sur l'année 10-11-13 à 13:06

C'est quoi ce 2,58% d'erreur ? Sur la somme mensuelle ? Sur le milieu du mois ?

Posté par
josse34
re : Lissage de données sur l'année 10-11-13 à 13:07

2.58% au mois de juillet entre la valeur donnée et la somme des valeurs calculées avec ton système dans le mois.

Posté par
Dwarliz
re : Lissage de données sur l'année 10-11-13 à 15:28

Oui en effet.
En réalité cette formule sert à approximer une fonction f dont on ne connait pas grand chose (quelque points uniquement) par un polynôme P.
Qui dit approximation dit erreur... je te conseil de te renseigner (sur wikipédia par exemple) si tu veux pouvoir calculer cette erreur.

Posté par
LeDino
re : Lissage de données sur l'année 10-11-13 à 16:06

Citation :
Ainsi, il n'est pas du tout indispensable que la courbe passe par le milieu du palier...
C'est bon à savoir.

Citation :
... la seule contrainte à respecter est cette somme mensuelle, le reste n'est pas important...
C'est plus logique ainsi... parce que ces deux contraintes (milieu de palier et total mensuel) sont relativement antagonistes dans une logique de "lissage".

Citation :
...mais il est indispensable de respecter strictement les totaux mensuels...
Soit.
Mais pour quelle raison ?
Quel est l'objectif poursuivi ?
S'agit-il d'un "simple exercice" donné dans le cadre d'une formation ?
D'un objectif de stage ?
D'une recherche personnelle, ou suggérée par un tiers ?
Es-tu supposé trouver par toi même ou te référer à un contexte (par exemple ce qui vous a été montré en cours) ?
Le but est-il par exemple de "reconstituer" une série journalière "vraisemblable" (donc lissée pour éviter les sauts...), en connaissant seulement la série mensuelle ?

Citation :
... par une courbe la plus lissée possible.
Soit.
Mais là encore : dans quel but ?
La notion de "courbe la plus lissée possible" peut avoir plusieurs définitions en rapport avec ses dérivées et courbures par exemple...
As-tu une définition, ou au moins un objectif visé ?

Citation :
Quant à la connexion entre les années (décembre à janvier) on prends en compte une seule année type qui sera toujours sous ces conditions...
Tu bottes en touche... mais ça ne règle pas la question.
Une série chronologique sur un an, ça n'existe pas et n'a pas de sens.
Il y a forcément des "conditions aux bords" qui peuvent être plus ou moins importantes selon le contexte et les buts cherchés.

Alors si tu nous disais simplement (et honnêtement) quel est le but poursuivi ?
Ca rendrait l'aide probablement plus judicieuse parce que mieux ciblée...

NB:
La contrainte de sommes mensuelles conservées par le lissage te parait "naturelle", mais mathématiquement elle ne l'est pas forcément. Les procédés de lissage habituels n'ont pas cette contrainte en général. C'est donc un objectif relativement complexe à atteindre.

La méthode de lissage la plus "simple" pour un non mathématicien un peu informaticien... c'est la moyenne mobile. En pratique c'est trivial : tu calcules la série jour par jour en valeurs journalières (VJ), comme tu l'as fait dans ta feuille EXCEL : il suffit de diviser la valeur mensuelle (VM) par le nombre de jours du mois. Tu prolonges cette série en amont et en aval par  m  cellules vides. Et tu calcules simplement la moyenne des VJ dans la colonne d'à coté (que tu notes par exemple VJ') et qui vaudra la moyenne des cellules de la colonne VJ commençant  m  termes avant et finissant  m  termes après. Ce faisaint tu fabriques la moyenne mobile (MM), "centrée" et "d'ordre"  n=2m+1. Il existe plein de variantes, mais celle-ci est la plus simple...

Il faut deux minutes pour le faire.
Si tu prends n proche de 30, tu obtiens un premier lissage très correct, mais "linéaire".
Tu recommences l'opération (par simple copie de la colonne de moyenne mobile à droite) et tu obtiens de suite une courbe arrondie qui offre un lissage très satisfaisant et qui "le lissage du lissage"...

Mais les totaux mensuels ne seront pas fidèlement respectés (c'est normal à cause de la courbure qui n'est pas constante...). En particulier au sommet (pic d'été = ventes de glaces ?)...

Pour respecter les totaux...
Il faut un procédé de lissage comportant des "degrés de liberté" (en général des paramètres ou coefficients pondérateurs ou ajusteurs...) en nombre suffisant pour leur imposer les douze contraintes de totaux mensuels.

Si les degrés de liberté sont sur numéraires, il est souhaitable d'avoir un critère de lissage (par exemple minimiser la dérivée seconde moyenne, ou son carré, ou son maximum...), et d'avoir un algorithme convergent qui recherche l'optimum.

Avant de déployer un tel arsenal, il faudrait s'assurer qu'il est en phase avec l'objectif poursuivi et le contexte de cet étude.

Citation :
En tout état de cause, on m'a suggéré un modèle
Qui ?
Quelqu'un "d'extérieur" au problème que tu as consulté ?
Ou quelqu'un qui est à la source du problème (comme par exemple un maitre de stage ?).

Citation :
.. qui fonctionne parfaitement :
Comment le sais-tu ?
Parce qu'on te l'a dit ou parce que tu l'as testé ?
Et qu'est-ce qui "fonctionne" :
- le lissage (ça c'est très facile, il y a plein de méthodes qui fonctionnent, à commencer par les moyennes mobiles...),
- ou bien le respect des totaux mensuels ?

Citation :
a0+a1*cos((2*PI*t)/365)+a2*cos(2*((2*PI*t)/365))+a3*cos(3*((2*PI*t)/365))+a4*cos(4*((2*PI*t)/365))+a5*cos(2*((5*PI*t)/365))+b1*sin((2*PI*t)/365)+b2*sin(2*((2*PI*t)/365))+b3*sin(3*((2*PI*t)/365))+b4*sin(4*((2*PI*t)/365))+b5*sin(5*((2*PI*t)/365))+b6*sin(6*((2*PI*t)/365))
Oui donc tu superposes des sinusoïdes de période variant de un mois à six mois. Pourquoi pas...

Citation :
... et les coefficients a0, a1, a2, a3, a4, a5, b1, b2, b3, b4, b5, b6 obtenus par équation à 12 inconnus que je n'arrive pas à déterminer simplement.
Les coefficients seront déterminés en fonction des contraintes que tu imposes à ta courbe.
Par exemple douze totaux mensuels imposés fournissent douze équations...

Mais le modèle qu'on t'a suggéré avait-il cette visée ?

Posté par
josse34
re : Lissage de données sur l'année 10-11-13 à 20:31

Bonsoir!

Citation :
Citation :
mais il est indispensable de respecter strictement les totaux mensuels

Soit. Mais pour quelle raison ? Quel est l'objectif poursuivi ? S'agit-il d'un "simple exercice" donné dans le cadre d'une formation ?
D'un objectif de stage ? D'une recherche personnelle, ou suggérée par un tiers ? Es-tu supposé trouver par toi même ou te référer à un contexte (par exemple ce qui vous a été montré en cours) ? Le but est-il par exemple de "reconstituer" une série journalière "vraisemblable" (donc lissée pour éviter les sauts...), en connaissant seulement la série mensuelle ?
Citation :
par une courbe la plus lissée possible.

Soit. Mais là encore : dans quel but ? La notion de "courbe la plus lissée possible" peut avoir plusieurs définitions en rapport avec ses dérivées et courbures par exemple... As-tu une définition, ou au moins un objectif visé ?

C'est à but professionnel, je monte un site internet composé en grande partie de code PHP. Dans une partie du fonctionnement global, je calcule un prévisionnel me donnant ces 12 données mensuelles d'entrée. Je pourrais m'en contenter mais dans un souci de justesse je veux "lisser" ces valeurs jours après jours dans l'année, c'est pour cela que ces 12 parametres sont les seules données à respecter!

Citation :
Citation :
En tout état de cause, on m'a suggéré un modèle

Qui ? Quelqu'un "d'extérieur" au problème que tu as consulté ? Ou quelqu'un qui est à la source du problème (comme par exemple un maitre de stage ?).


Mes multiples posts permettent de comparer plusieurs approches viables :
Lissage de données sur l\'année

Ainsi, j'admet qu'il existe une multitude de solutions possible, celles ci-sont très intéressantes :

La solution de Maths-forum http://www.maths-forum.com/showthread.php?p=977773 étant d'une simplicité très agréable pour un profane comme moi mais avec quelques imprécisions.

La votre est le meilleur rapport simplicité/performance mais déjà d'une mise en oeuvre plus fastidieuse bien que peu complexe.

Enfin, la solution de loin la plus satisfaisante sur avec une précision de 100%, une courbe absolument parfaite mais complexe mathématiquement (en tout cas pour moi!) et difficile à mettre en oeuvre (car nombre de calculs préliminaires et surtout cette équation linéaire à 12 inconnus!!) mais pas impossible!

Le principe du forum étant de partager l'information, je vais regrouper ces informations sur tout mes posts en fin de recherche.

En tout cas, grand merci pour votre participation, j'apprécie grandement et c'est sincere  

Bonne soirée!

Posté par
Dwarliz
re : Lissage de données sur l'année 10-11-13 à 20:42

Pas de problème, bonne soirée !

Posté par
LeDino
re : Lissage de données sur l'année 10-11-13 à 21:27

Citation :
C'est à but professionnel, je monte un site internet composé en grande partie de code PHP. Dans une partie du fonctionnement global, je calcule un prévisionnel me donnant ces 12 données mensuelles d'entrée. Je pourrais m'en contenter mais dans un souci de justesse je veux "lisser" ces valeurs jours après jours dans l'année, c'est pour cela que ces 12 parametres sont les seules données à respecter!

Dans ce cas je ne comprends absolument pas la contrainte des totaux mensuels.
Ton prévisionnel est forcément soumis à une incertitude bien supérieure au biais introduit par le lissage...
Qu'est-ce qui t'empêche d'utiliser les valeurs journalières lissées pour l'affichage de la courbe et de publier les totaux mensuels correspondants (arrondis pour plus de simplicité). En quoi les cumuls de la courbe lissée seraient-ils moins pertinents pour l'usage que tu prévois ?

Au pire, si tu tiens à tes totaux mensuels, tu les gardes, et tu affiches la courbe lissée sans en donner les valeurs.
Quel besoin ont les utilisateurs de ton site de connaître précisément des valeur journalières qui de toutes manières sont fictives (issues d'un lissage...) et incertaines (issues d'une prévision mensuelle...) ?

Citation :
La votre est le meilleur rapport simplicité/performance mais déjà d'une mise en oeuvre plus fastidieuse bien que peu complexe.
Tu plaisantes ?
Les moyennes mobiles en php c'est un vecteur, une boucle, une somme, une division...

Pour i=imin à imax :   VJ'(k) = Somme(VJ(i))/(imax - imin)

imin est le sup de 1 et de k-m
imax est l' inf de 365 et de k+m
avec par exemple m=14...

Et tu peux appliquer deux fois de suite ce même traitement pour calculer VJ'' à partir de VJ'.
C'est à peine une quinzaine de lignes de code...

Le résultat est très satisfaisant...
L'erreur sur les totaux est généralement inférieure à 2% du total.

Posté par
josse34
re : Lissage de données sur l'année 11-11-13 à 00:03

Il est vrai LeDino que tu as raison sur toute la ligne!!
C'est simple à mettre en oeuvre et je ne me prends pas la tête avec des calculs!!
L'erreur sur le total est nulle, sur un résultat à 210 j'ai 2.58% d'erreur, je ne devrais pas subir mensuellement une erreur supérieure à 3% mais aurais bien voulu l'éliminer!!
Pourquoi ais je un palier non négligeable entre le 31 décembre à 1.389 et le 1er janvier à 1.754 ?
Merci!

Posté par
Dwarliz
re : Lissage de données sur l'année 11-11-13 à 00:12

Si tu prends les valeurs 3 par 3 comme je t'avais montré, il te faut prendre les 15 novembre, décembre et janvier pour finir ton année.
Si tu as fais ça, sans erreur dans la formule, il ne peut en aucun cas avoir de discontinuités.

Posté par
josse34
re : Lissage de données sur l'année 11-11-13 à 00:21

Sauf erreur de ma part, c'est le cas mais j'ai bien ce palier : http://cjoint.com/?CKlauUaEpuB
Merci à vous deux!

Posté par
LeDino
re : Lissage de données sur l'année 11-11-13 à 00:41

LE PLUS SIMPLE EN PHP...
LISSAGE par MOYENNE MOBILE + REDRESSEMENT par DECALAGE de la QUANTITE NECESSAIRE pour RESPECTER le TOTAL MENSUEL
On répète ce cycle trois ou quatre fois, c'est amplement suffisant.
NB: A chaque cycle, on diminue la plage de calcul de la moyenne mobile (pour limiter le biais de lissage sur les totaux), par exemple :
... sur 31 jours centrés la première fois, puis 17, puis 9, puis 5.

Ca fonctionne très bien.
Il faut une double boucle pour la moyenne mobile.
Une simple boucle pour le calcul du total mensuel, et le redressement dans la foulée.
On itère quatre fois très facilement... si on a correctement défini la plage d'indices entrant dans la moyenne mobile.

Astuces :
Prolonger le mois précédent janvier avec les valeurs de janvier. Idem après décembre...


Pour illustration, premier lissage :  VJ  -->  VJ'
Lissage par moyenne mobile centrée : 15 jours avant à 15 jours après.
Le lissage est "linéaire" et les totaux par mois sont en erreur quadratique de 2,7.

Lissage de données sur l\'année

Pour illustration, deuxième lissage (redressé) :  VJ  -->  VJ'  -->  VJ*  -->  VJ''
Le lissage V' est décalé chaque mois de la quantité nécessaire pour respecter le total.
L'erreur mensuelle quadratique devient nulle par construction...
... mais de ce fait, des "sauts" apparaissent aux jonctions.
Pour effacer ces sauts, on lisse donc à nouveau cette série par moyenne mobile.
La plage de lissage est réduite à 8 jours avant 8 jours après.
C'est suffisant pour lisser et cela atténue le biais sur le total mensuel.
L'erreur mensuelle quadratique passe à 2,0.

Lissage de données sur l\'année

Pour illustration, quatrième lissage (redressé) :  On répète deux fois le cycle précédent.
Décalage chaque mois de la quantité nécessaire pour respecter le total.
Effacement des sauts (de plus en plus petits), en lissant par moyenne mobile.

La plage de lissage est réduite à 4 jours avant 4 jours après (pour V''').
L'erreur mensuelle quadratique passe à 0,22 seulement.

La plage de lissage est réduite à 2 jours avant 2 jours après (pour V'''').
L'erreur mensuelle quadratique passe à 0,06  c'est à dire presque rien...

Lissage de données sur l\'année

Erreur quadratique :    2,76	2,07	0,22	0,06
Mois	Jours	VM	VM'	VM''	VM'''	VM''''
0	31	60	60,0	59,6	59,9	60,0
1	31	60	63,6	61,8	60,2	60,0
2	28	80	81,6	82,8	80,2	80,0
3	31	130	127,9	131,4	129,8	130,0
4	30	150	150,0	151,7	150,0	150,0
5	31	180	180,2	182,1	180,1	180,0
6	30	200	197,1	200,7	200,0	200,0
7	31	210	204,6	207,1	209,6	209,9
8	31	170	171,8	169,1	170,3	170,1
9	30	140	136,3	135,8	139,6	139,9
10	31	90	93,3	88,3	90,2	90,1
11	30	60	62,0	59,0	60,0	60,0
12	31	50	51,5	50,0	50,1	50,0
13	31	50	50,0	49,9	50,0	50,0

Posté par
Dwarliz
re : Lissage de données sur l'année 11-11-13 à 00:42

P est un polynôme, il ne peut être que continue. Ton problème est que si tu prend les 15 novembre, décembre et janvier, il faut que tu considère le mois de janvier comme un 13ème mois... donc le 15 janvier devrai être le 380ème (365+15) jour de l'année, et non le 15... sinon il y a une rupture.

Posté par
Dwarliz
re : Lissage de données sur l'année 11-11-13 à 03:17

Voilà comment faire pour ne pas avoir la rupture Décembre/Janvier : http://cjoint.com/?0KldrkR2XAF

Posté par
josse34
re : Lissage de données sur l'année 11-11-13 à 11:02

Le moins que l'on puisse dire c'est que vous me l'avez vendu votre solution !!!!!!!!!!!!!!!!!!!!!!!

Merci Dwarliz pour la correction, c'est impeccable, j'apprécie!

LeDino, réduire cette erreur à 0,6% avec cette simplicité est absolument merveilleux pour moi! Pourrais tu me filer le fichier excel ayant servi à la création de ces graphiques??

Merci à vous deux et écrivez moi un petit mot sur boris3434 at voila point fr, c'est pour autre chose que cela!

Posté par
LeDino
re : Lissage de données sur l'année 11-11-13 à 14:40

Pour enfoncer le cou : 3 autres exemples du lissage + redressement itéré 4 fois, pour apprécier la "ROBUSTESSE" :

Le cas idéal de la courbe très régulière...

Lissage de données sur l\'année

Un cas quelconque...

Lissage de données sur l\'année

Un cas plus oscillant...

Lissage de données sur l\'année


Commentaire :
Les moyennes mobiles sont ROBUSTES.
Elles restent toujours plus ou moins "collées" à la courbe d'origine.
Elles présentent moins d'opportunités "d'instabilité" que les lissages par des courbes paramétriques dont on ajuste les coefficients pour respecter les contraintes de continuité ou de totaux partiels : les solutions du système d'équation qui en résulte peuvent donner des surprises désagréables, comme des fortes vagues...

La meilleure solution serait un système de courbes paramétriques ayant de bonnes propriétés (pourquoi pas des courbes trigonométriques avec amplitude et période variables... comme proposé sur l'autre site et qui marche bien sur ton exemple), dont on cherche un minimum d'une fonction de "régularité", sous contraintes de continuité et de totaux.

La fonction de régularité à minimiser pourrait être la courbure absolue moyenne, ou la courbure quadratique (pour pondérer les variations fortes) ou encore le maximum de courbure (pour interdire les variations fortes)... la courbure pouvant être simplement le changement de pente...

Mais un tel système est lourd à développer. Surtout en PHP.
Donc les moyennes mobiles redressées et itérées restent un très bon compromis, assez simple à programmer en s'y prenant bien.

Posté par
LeDino
re : Lissage de données sur l'année 11-11-13 à 14:40

Citation :
Pour enfoncer le cou

C'est bien sûr le "cLou" que je voulais enfoncer ...

Posté par
carpediem
re : Lissage de données sur l'année 11-11-13 à 16:25

salut

ou alors tu voulais lui tordre le cou pour avoir imposer des conditions sans intérêts ....

Posté par
josse34
re : Lissage de données sur l'année 11-11-13 à 19:40

C'est sur que LeDino se bat férocement pour faire valoir cette solution!!!!
Elle me convient à merveille!! Merci!

Je suis dans ma dernière ligne droite, pourrais tu me transmettre le fichier Excel ayant servis à ces graphiques, cela m'aide beaucoup lors de la retranscription en PHP!

Et envoyez moi juste un petit mot sur mon mail LeDino et Dwarliz!!

Posté par
josse34
re : Lissage de données sur l'année 12-11-13 à 07:17

Citation :
LE PLUS SIMPLE EN PHP...
LISSAGE par MOYENNE MOBILE + REDRESSEMENT par DECALAGE de la QUANTITE NECESSAIRE pour RESPECTER le TOTAL MENSUEL
On répète ce cycle trois ou quatre fois, c'est amplement suffisant.
NB: A chaque cycle, on diminue la plage de calcul de la moyenne mobile (pour limiter le biais de lissage sur les totaux), par exemple :
... sur 31 jours centrés la première fois, puis 17, puis 9, puis 5.

Ca fonctionne très bien.
Il faut une double boucle pour la moyenne mobile.
Une simple boucle pour le calcul du total mensuel, et le redressement dans la foulée.
On itère quatre fois très facilement... si on a correctement défini la plage d'indices entrant dans la moyenne mobile.


Je suis TRÈS intéressé d'obtenir ce développement, l'as tu déjà fait en PHP?! Sinon ton fichier excel!
Merci vous êtes des amours!!

Posté par
LeDino
re : Lissage de données sur l'année 12-11-13 à 08:24

Je l'ai prototypé sous EXCEL.
Je n'ai pas le temps tout de suite, mais ce soir en principe je te le mets sur "ci-joint"...

Je n'ai pas fait le PHP (que je ne connais pas).
Mais j'ai en tête l'algorithme qui est raisonnablement simple.
Il faut surtout définir les bons tableaux, et ça devient assez simple.
J'essaie aussi de t'envoyer ça, mais là je suis très pris sur les deux jours à venir...

Posté par
josse34
re : Lissage de données sur l'année 12-11-13 à 08:47

Grand merci LeDino!!
Et envoi un petit mot sur boris3434 at voila point fr !

Posté par
LeDino
re : Lissage de données sur l'année 12-11-13 à 19:44

Feuille de lissage mensuel par MM redressées et itérées :

Posté par
josse34
re : Lissage de données sur l'année 14-11-13 à 16:05

Je viens de terminer le codage PHP, ça fonctionne à merveille !!!!

Grand merci à vous deux Dwarliz et LeDino, c'est énormément grâce à vous !!

Je cloture ce post avec plaisir!

Encore merci!

PS : LeDino, envois moi un mail sur boris3434 at voila point fr comme viens de le faire Dwarliz !!!!

Posté par
josse34
re : Lissage de données sur l'année 20-12-13 à 09:05

Désolé mais vu qu'il est impossible de contacter par MP sur ce forum:

LEDINO DONNE MOI RAPIDEMENT TON ADRESSE POSTALE SUR  boris3434 at voila point fr JE TE PRIE comme l'a fait Dwarliz.

Je ne ferais pas d'autres interruption de ce genre et bonnes fêtes à tous!

Merci!

Posté par
LeDino
re : Lissage de données sur l'année 21-12-13 à 14:15

Bonjour josse34,

Pourquoi tiens-tu à avoir mon adresse ?
Je préfère échanger sur le forum.
Comme ça tout le monde en profite .

Posté par
josse34
re : Lissage de données sur l'année 21-12-13 à 14:22

D'après toi patate! Je tiens à t'expédier un petit cadeau.
Réfléchi pas et envois le moi, je ne vais pas t'expédier de l'anthrax!

Posté par
LeDino
re : Lissage de données sur l'année 21-12-13 à 20:26

Cool !

C'est super gentil, je te remercie .
Le fait que tu aies pu atteindre ton objectif est une récompense plus que suffisante pour moi.
Mais je suis touché par ton attention.
Si tu tiens à me faire plaisir, fais un geste pour quelqu'un qui en a sérieusement besoin

Posté par
josse34
re : Lissage de données sur l'année 21-12-13 à 21:43

Ecoute, c'est surtout grâce à toi que j'ai accompli mon projet (sans vexer Dwarliz), j'ai toujours fait ainsi et je trouve cela normal surtout quand il s'agit de monter modestement un projet à but commercial.
Ainsi, je ne vais pas te supplier, surtout qu'une bonne bouteille de vin ne se file pas à Emmaus, donc si tu ne veux pas filer ton adresse postale, choisie un relais http://www.mondialrelay.fr/trouver-le-point-relais-le-plus-proche-de-chez-moi/ et precise ton nom.
Bye!

Posté par
josse34
re : Lissage de données sur l'année 04-01-14 à 21:11

Derniere chance LeDino, donne moi ton code postal par mail pour aller chercher un colis à un relais proche de chez toi!
Merci
Bye

Posté par
LeDino
re : Lissage de données sur l'année 05-01-14 à 01:01

Bonsoir Josse.
Toi, on peut dire que tu as de la suite dans les idées !
C'est bien. C'est une belle qualité.

Je ne pensais pas avoir à être si "explicite", mais vu les circonstances... je préfère clarifier que risquer de te paraître grossier ou indifférent.

Le forum est pour moi un lieu d'évasion.
C'est important pour moi qu'il y ait une coupure nette et indiscutable entre cet espace de liberté... et mon univers personnel.
Donc pas de contact. D'où mon esquive.

Maintenant, tu peux être plus que rassuré : ton initiative, et ton insistance à vouloir faire ce geste pour me remercier et me faire plaisir, prouvent si c'était encore nécessaire à quel point tu m'es reconnaissant. Cette conviction vaut largement toutes les bouteilles, aussi bonnes fussent-elles.

Donc je te remercie, mais je décline définitivement cette jolie marque d'attention.
Mais n'aies aucun doute que le cœur y est.

Alors bonne année... et "Santé" !!!

Posté par
carpediem
re : Lissage de données sur l'année 05-01-14 à 12:22

si c'est un bon Bourgogne je suis preneur ....

Posté par
josse34
re : Lissage de données sur l'année 05-01-14 à 19:25

Un Bourgogne... POUAHhhh!!! Lol!
Eh bien écoute je respecte et te remercie grandement.
Bonne année à vous tous!!!
Bye



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1768 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !