Passer au contenu principal
LDM répartit des prévisions régionales sans recalculer l’économie du modèle d’origine. Les équations décrivent les modules structure actuels.

Classeur et identifiants

MarketPropensityID comprend region, sector, segment, type, sub_type. Les prévisions gardent scenario.name, potential, impact_type, savings_reporting_level, identifiants supplémentaires et variable. Les doublons peuvent faire échouer le pivot. Chaque marché doit trouver sa configuration et chaque sous-région son parent. Les propensions textuelles sont des entrées clé/valeur séparées par virgules, converties en poids flottants. Blancs et textes none/nan donnent l’absence de dictionnaire. attribute.partition_type est conservé, mais n’est pas un filtre automatique de partition.

Années et unités

L’importateur extrait les années uniques et pivote les variables. Fournir des années entières triées et consécutives : la diffusion avance d’une unité par position, même si les années comportent des écarts. Les poids sont sans dimension. Numérateur/dénominateur de marché et chaque paire de propension doivent partager une unité. La sortie conserve l’unité de prévision sans conversion. Une part ou un indicateur intensif ne doit pas être traité comme une quantité additive sans interprétation explicite.

Propension relative

Bi=∑kakxi,kxR,kB_i=\sum_k a_k\frac{x_{i,k}}{x_{R,k}} Avec adoption_propensity_parameters=None ou texte none, Bi=1B_i=1. Les coefficients ne sont ni normalisés ni contraints positifs. Transformer ou pondérer les indicateurs selon leur relation comportementale. Les dénominateurs nuls, clés absentes et valeurs non numériques ne sont pas réparés.

Adoption initiale

Pour starting_point_method="sales_and_barriers", lire le marché MiM_i avec <market_share_parameter>.<sector>.<segment> et les ventes initiales NiN_i avec starting_sales_parameter : si={Ni/Mi,Mi≠00,Mi=0,si0=min⁡(siBi,0.999)s_i=\begin{cases}N_i/M_i,&M_i\ne0\\0,&M_i=0\end{cases},\qquad s_i^0=\min(s_iB_i,0.999) Marché nul et ventes non nulles produisent zéro avec avertissement. La borne est seulement supérieure : les valeurs négatives échouent ensuite au contrôle de diffusion. Le texte "none" produit l’absence de point initial. Le test écrit starting_point_method == "none" or None n’accepte pas Python None, qui atteint l’erreur de méthode invalide.

Méthodes de partition brute

market_size donne ri,y=Mi/MRr_{i,y}=M_i/M_R, constant pour des marchés fixes. barriers_and_market_size donne ri,y=(Mi/MR)Bir_{i,y}=(M_i/M_R)B_i. diffusion donne ri,y=(Mi/MR)Fi(y)r_{i,y}=(M_i/M_R)F_i(y). Toute autre valeur de partition_method provoque ValueError. Avec p,q,t0p,q,t_0 : F(t)=1−e−(p+q)(t−t0)1+(q/p)e−(p+q)(t−t0)F(t)=\frac{1-e^{-(p+q)(t-t_0)}}{1+(q/p)e^{-(p+q)(t-t_0)}} L’âge initial équivalent est : ti0=ln⁡(1+si0q/p)−ln⁡(1−si0)p+q+t0t_i^0=\frac{\ln(1+s_i^0q/p)-\ln(1-s_i^0)}{p+q}+t_0 Évaluer la première position à ti0+1t_i^0+1, puis avancer d’un an et réétiqueter avec les années fournies. Fractions initiales et calculées sont contrôlées dans [0,1][0,1]. La borne exacte un passe le premier contrôle mais rend l’inverse singulier; le calcul initial usuel l’évite avec 0,999. Exiger pp positif, p+qp+q non nul et des valeurs finies.

Normalisation

Pour chaque configuration, calculer une ligne pour chaque sous-région fournie, puis : wi,y=ri,y∑jrj,y,fi,y=wi,yFyw_{i,y}=\frac{r_{i,y}}{\sum_jr_{j,y}},\qquad f_{i,y}=w_{i,y}F_y L’ensemble de normalisation est la liste fournie, sans regroupement supplémentaire par type de partition ou parent. Le code peut donc inclure des territoires sans lien si l’appelant ne les filtre pas. Utiliser une partition cohérente et réconcilier par région. Avec poids finis et somme non nulle, ∑ifi,y=Fy\sum_i f_{i,y}=F_y. Cela ne démontre pas la validité géographique. Poids négatifs, chevauchements et dénominateurs incohérents peuvent créer des allocations invalides. Aucun repli général pour somme nulle, bornage positif ou arrondissement en clients entiers n’est implémenté.

Sorties et exécution

get_disaggregated_forecasts multiplie les partitions par chaque série puis ajoute attributs, sous-région, scénario, potentiel, impact, niveau, identifiants et variable. Les colonnes annuelles suivent study_years. Le CLI concatène et exporte un CSV horodaté dans ./results/, index du dataframe inclus. --input-data-xlsx utilise ./data/DERP_input.xlsx par défaut et --log-file utilise ./logs/ldm.log. Ces noms ne limitent pas les modèles admissibles. Une liste vide ou un appariement absent peut échouer à la concaténation ou à next(...); aucun rétablissement général n’est prévu.

Contrôles reproductibles

Pour 100 GWh, des parts 0,6/0,4 et facteurs 0,5/1,5 donnent des poids 0,3/0,6, normalisés à 1/3 et 2/3 : 33,333… et 66,666… GWh. Passer en MWh modifie seulement les valeurs allouées, pas les poids. Contrôler tableaux nommés, unicité, couverture, ordre annuel, poids finis/non négatifs, adoption initiale et conservation. Tester les dénominateurs nuls avant production. Les tests existants couvrent import, syntaxe des dictionnaires, points initiaux, diffusion, partition et journaux; ils ne valident pas empiriquement les indicateurs spatiaux.