Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Problème : régression polynomiale

Patxi

XLDnaute Nouveau
Bonjour à toutes et à tous.

Je viens vers vous pour voir si vous pourriez m'aider sur un problème qui revient assez souvent, apparemment, mais je n'ai pas su trouver de réponse à ma quête donc je préfère créer un sujet à part... Il s'agit d'un cas de régression polynomiale (attention, message relativement long)

Je suis actuellement en stage dans une société s'occupant de la gestion de l'eau (distribution, assainissement, etc) et travaille sur un projet d'élaboration de courbes de tendance en dans le but de repérer des fuites sur un réseau d'eau.
En résumé, je dispose des relevés, heure par heure, du débit d'eau des différents secteurs d'un réseau d'eau potable. Par une simple soustraction j'ai donc la consommation horaire d'eau potable sur chaque secteur.
L'idée est d'établir un modèle suffisamment précis et fiable qui, par une méthode statistique assez classique, estime la consommation d'eau future, à partir des consommations passées. La détection de fuites se fait alors en remarquant un écart trop important entre ce qui est prévu et réellement consommé.
J'ai déjà commencé à établir des modèles (modèle additif et multiplicatif) mais leur précision n'est pas encore optimale, et je voudrais tenter quelque chose.

Je m'explique : à partir de la courbe représentant la moyenne mobile d'ordre 24 des consommations en fonction de la date (ou des consommations brutes en fonction de la date, peu importe), je cherche à estimer la tendance en appliquant tout simplement une courbe de tendance polynomiale. J'arrive à obtenir quelque chose qui visuellement pourrait être satisfaisant (estimation à l'ordre 6), et je fais donc afficher l'équation. L'idée est donc alors de récupérer cette équation (fonction du temps) et de l'appliquer aux dates de mon classeur.
Problème : en faisant cela, j'obtiens des valeurs tout à fait délirantes!
Même en utilisant une approximation du second degré plus simple, j'obtiens quelque chose qui n'a rien à voir.
Alors d'où peut venir le problème? Est-ce que j'aurais atteint les limites d'Excel en termes de quantité de données? Est-ce qu'il y a un changement de référentiel quand on bascule des données numériques aux courbes?

En pièce jointe, vous trouverez mon fichier. Dans l'onglet données, vous trouverez mes données (logique) qui ont servi de base. J'ai tracé la moyenne mobile (colonne G) en fonction du temps (colonne D). Cette courbe se trouve dans l'onglet "courbes", c'est la 3ème courbe (titre : moyenne mobile). J'ai laissé dessus la courbe de tendance avec son équation. Dans l'onglet données, à la colonne N "Approximation degré6", j'ai reporté cette équation en l'appliquant aux dates. Et vous voyez bien que ça ne colle pas...
Je me suis basé uniquement sur l'année 2013, pour faire mes tests.

Merci d'avance.
 

Pièces jointes

  • Essais.xlsx
    5.6 MB · Affichages: 54

Nairolf

XLDnaute Accro
Salut,

J'ai déjà travailler sur une question similaire.
En fait le problème est que pour que ta formule soit juste, il faut que les coefficients de ton polynôme aient un nombre suffisant de chiffres significatifs (ce qui n'est pas le cas des coeffs donnés sur un graphique Excel) car parfois un petit écart change énormément le résultat.

Il existe une fonction qui permet de le faire : DROITEREG().
Autant il est facile de l'utilisée en régression linéaire, autant il est plus subtile de le faire en régression polynomiale.

J'ai testé, mais le nombre de données semble trop important pour que cela fonctionne, je poursuis mes recherches et reviens vers toi.
 

CISCO

XLDnaute Barbatruc
Bonjour

Il parait évident qu'il y a une sorte de courbe type journalière, dont la moyenne change en fonction de la période (semaine, mois, saison ?). Par conséquent, ne faudrait-il pas faire un ou plusieurs modèles journaliers utilisant comme origine une moyenne fluctuante modélisée, un peu comme la "modulation d'amplitude" autour d'une sinusoïde ?

@ plus
 

Patxi

XLDnaute Nouveau
Salut!
D'accord, je vois le problème! Il est évident que quand on tape dans de la puissance 6, les écarts sont vite significatifs...
J'ai utilisé également DROITEREG(), qui fonctionne pour quelques valeurs mais déconne dès que je prends trop de données en compte.
Merci de ton aide!
Bonjour,
oui, c'est pris en compte dans le modèle. Il y a en fait deux tendances qui sont prises en compte et qui régissent des coefficients de saisonnalité, l'une est journalière avec des pics de consommation vers 8h et vers 20h, l'autre sur l'ensemble de l'année avec une forte consommation l'été.
Le but de la manoeuvre est ici de modéliser le tendance sur l'année qui fait une courbe "en cloche" par un polynôme, ce qui supprime le calcul de coefficients mensuels, puis d'appliquer à chaque heure ses coefficients saisonniers bien spécifiques.
 

Modeste geedee

XLDnaute Barbatruc
Bonsour® Si tu ne possèdes que des relevés de débit de distribution par secteur (i.e. pas de retour consommation réelle utilisateur final)
- la notion de fuite est abstraite et résumée("fuites normales") à un pourcentage estimé par secteur (comme la démarque inconnue et pertes dans le commerce)
- c'est le secteur qui après bilan remonte, affine et justifie ce pourcentage. (périodicité(horaire, jour), saisonnalité (hiver, été), travaux et extensions)
- la détection de fuite (alors proportionnelle aux volumes distribués) ne sera détectée que par la variation de cette proportion.
c'est la forme de cette variation de proportion qui pose alors problème, une variation faible et continue sera difficilement détectable, une variation importante et soudaine étant une détection évidente...
- il faut pour cela avoir plusieurs échantillonnages (journée, semaine, mois, années) corrélés en périodicité(horaire, jour), saisonnalité (hiver, été), travaux et extensions .

C'est le casse-tête de la gestion prévisionnelle ...
c'était la lubie d'un de mes responsables en gestion de production qui nous avait proposer d'étudier un système pour "pondérer les impondérables"...
et qui fut résumée un peu plus-tard à une étude pour minimiser les risques.
 

Nairolf

XLDnaute Accro
Salut Modeste et CISCO,

Je suis tout à fait d'accord avec les remarques que vous avez faites.

En première approche je n'avais regardé que le côté mathématique, puis j'ai regardé, comme vous, le côté analytique : que mesurons-nous et quels éléments sont exploitables ?

Le prévisionnel est quelque chose de complexe, pour cela il faut des échantillons suffisamment représentatifs (c'est à dire respectant des rythmes identifiables et étant dans un état de fonctionnement "normal").

Donc la limite du résultat sera donné par la représentation choisie et les données acquises sachant que la complexité est de forme exponentielle par rapport à la précision du résultat.

C'est-à-dire, par exemple qu'il sera probablement facile de minimiser de 80% les problèmes (avec la prise en compte de valeurs moyennes sur des périodes relativement longues : 1 semaine, 1 mois?). Imaginons que le travail réalisé est équivalent en temps au coût engendrés par les risques, l'efficacité est donc de 80% et c'est pas mal.
Dans ce cas atteindre 90% pourrait représenter un travail 10 fois plus long, l'efficacité serait de l'ordre de 9%, ça c'est bof.
Et aller jusqu'à 99% pourrait représenter un travail 1 000 fois plus long, là l'efficacité est catastrophique : 0,099%.

Noter que les chiffres de cette analyse sont faux, mais comme discuté plus haut, j'ai mis 2 minutes pour ce message, en étant plus précis j'aurais mis probablement 1h voir plus, mais le résultat obtenu correspond à mon objectif: donner une idée de principe.

Je pense que c'est la première question qu'il faut se poser : rapport bénéfices/coût (ce n'est pas obligatoirement de l'argent don je parle), c'est pour ça qu'on essaye le plus souvent de minimiser les risques et non de les empêcher tous.
 

Patxi

XLDnaute Nouveau
La question n'est pas réellement là, les méthodes que j'utilise sont vérifiées et approuvées par un ingénieur de recherche spécialiste des statistiques et mon tuteur qui est responsable du support technique de la boîte.
C'est réellement le problème "technique" d'utilisation de la régression polynomiale qui me pose problème ici.
Quant à la quantité de données et le fait qu'elles soient représentatives, pas de souci, j'ai des relevés heure par heure de chaque jour pendant 4 ans...
 

Nairolf

XLDnaute Accro
Je ne remets pas en cause ce qui a été déterminé et la compétence des personnes que tu cites, et je ne suis pas un expert de ce domaine.
Mais je remarque, par exemple, que, sur les 4 ans, il y a des manques de données dans la colonne volume, ce qui peut fausser tes résultats car la structure des données doit être la plus homogène possible car un trou est interprété comme une valeur nulle et non une valeur manquante.

D'autres remarques :

Si vous chercher une équation pour le cycle annuel, il serait probablement bon de réduire la précision des courbes, en sommant la conso à la journée par exemple, ça permet de lisser les courbes en réduisant le nombre de données, ce qui permettrait peut-être de réaliser la régression polynomiale sur ces nouvelles données.

J'ai regardé d'avantage les courbes et la courbe de tendance, il semblerait que la régression polynomiale ne soit pas très juste car le coefficient de corrélation R² n'est pas très proche de 1.
Je pense que le type polynomial de la régression choisi ne doit pas être le bon, car la forme de la courbe ressemble plus à une courbe de Gauss (plateau-pic-plateau).
Il faut probablement travailler avec un autre type de régression non linéaire. Ce qui est possible, mais pas simple, via l'algorithme de Gauss-Newton. Mais là, ça dépasse mes connaissances actuelles.
 

CISCO

XLDnaute Barbatruc
Bonjour

Où est-ce que tu en es avec ce sujet ?

En pièce jointe, j'ai fait un petit essai qui n'a que peu de valeur car il ne concerne que les 5 premiers jours. Mais bon, c'est juste pour voir ce que cela donne.
En colonne C, la moyenne de chaque jour.
En colonne D, le débit horaire moins cette moyenne journalière.
De la colonne D à la colonne H, le débit horaire moins cette moyenne journalière pour les 5 premiers jours.
En colonne I, les heures de 0 à 23:00
En colonne J, la moyenne de colonnes D à H, donc des 5 premiers jours une fois modifiés.
En colonne K, une modélisation avec un polynôme de degré 6 des résultat de la colonne J.
En colonne O, la modélisation pour les 5 premiers jours.
Sur le troisième graphique, j'ai mis les courbes correspondant à ces 5 premiers jours, et la courbe correspondant à cette colonne O, à ces valeurs modélisées en gris.

Qu'est-ce que tu en penses ? Je ne dis pas que c'est la bonne méthode (les erreurs relatives ne sont pas toujours négligeables), mais bon, c'est un essai...

Il faudrait aussi modéliser la courbe donnant la moyenne (peut être pas sur toute l'année, mais peut être avec un modèle par saison, par mois. A voir ?), essayer de repérer des "répétitions" (Est-ce que le type de courbe journalier est le même en semaine et en W.E, ou les jours fériés, ou pendant les périodes de vacances... ?) , et faire des moyennes sur beaucoup plus que 5 jours.
Autre question, qu'est-ce que cela donne si tu superposes les courbes de 2013, 2014 et 2015 ? Les écarts sont-ils importants ?

@ plus
 

Pièces jointes

  • Essais eau partiel.xlsx
    830.3 KB · Affichages: 59
Dernière édition:

Patxi

XLDnaute Nouveau
Bonjour et merci de l'aide apportée. Je vais regarder ça de plus près.
Néanmoins, suite à une redéfinition du besoin de l'entreprise, j'utilise une nouvelle méthode qui s'avère déjà plus concluante.
Merci encore à tous.
 

Patxi

XLDnaute Nouveau
Avec plaisir!
En fait, la méthode d'approximation que j'utilisais permettrait, si elle fonctionnait, d'estimer les consommations assez loin dans l'avenir, avec forcément une précision assez relative si on reste sur des calculs "simples".
Or, l'entreprise n'a, en définitive, besoin que d'une prédiction à J+1, pour pouvoir comparer en temps réel et détecter les fuites rapidement. Pour cela, une estimation en se basant sur la semaine précédente pour estimer le jour suivant est bien plus significative et plus simple à mettre en oeuvre.
Voici donc ce que j'ai entrepris de faire :
- calcul des coefficients saisonniers de la même manière qu'avant (moyenne mobile sur l'année, moyenne de chaque heure...)
- calcul de la moyenne des consommations des 7 jours avant le jour d'estimation voulu (soit une moyenne sur 7x24=168 valeurs)
- estimation du jour souhaité en multipliant cette moyenne par les coefficients saisonniers horaires
- calcul d'un intervalle de tolérance à 5% pour le coefficient saisonnier avec la formule INTERVALLE.CONFIANCE.STUDENT
- pour chaque heure, calcul du rapport valeur réelle/valeur moyenne de la semaine. On vérifie alors si le coefficient trouvé est dans l'intervalle de tolérance. S'il ne l'est pas, c'est qu'il y a un problème.

Par exemple, si je veux estimer la consommation pour la journée du 9 juin 2017 :
je fais la moyenne de la consommation du 2 juin 2017 à 00h00 au 8 juin à 23h (168 valeurs)
je fais le produit de cette valeur par chacun des 24 coefficients horaires déjà calculés
je calcule l'intervalle de tolérance de chacun des 24 coefficients horaires (utilisation de la fonction INTERVALLE.CONFIANCE.STUDENT après avoir calculé l'écart type. Les valeurs extrêmes de l'intervalle sont le coefficient saisonnier utilisé plus ou moins la valeur trouvée par la formule)
calcul pour chaque heure du rapport valeur réelle/moyenne et vérification

Cette méthode beaucoup plus simple est très efficace dans ce cas là (testée sur des jours avec et sans fuite) et sera assez facile à automatiser. De plus, le modèle s'adapte chaque jour puisque pour l'estimation d'un jour, on prend les valeurs réelles du jour d'avant.

Je ne sais pas si j'ai été bien clair...
 

Discussions similaires

Réponses
4
Affichages
185
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…