Pas encore de compte ?
La modélisation de la distribution de données trouve les paramètres de la loi de distribution de probabilité ou de plusieurs lois candidates qui correspond aux données que l’on cherche à modéliser.
Les données peuvent suivre une loi normale, une loi gamma, ou toute autre distribution ainsi que les paramètres attachés à la loi.
Testé sous Anaconda et Python 3.7
# -*- coding: utf-8 -*- """ Created on Fri Jul 8 10:47:17 2022 @author: https://www.stat4decision.com/fr/distribution-donnees-python/ """ import numpy as np import pandas as pd import matplotlib.pyplot as plt import scipy import scipy.stats import time # Nombre de valeurs à générer length = 30000 bins=500 ### Génération des données data = np.random.gamma(2,1, length) ### Histogramme des données y, x = np.histogram(data, bins=bins, density=True) # Milieu de chaque classe x = (x + np.roll(x, -1))[:-1] / 2.0 plt.figure(figsize=(12,8)) plt.hist(data, bins=500, density=True) plt.title("Montant des paiements effectués (K€)") plt.show() dist_name = "gamma" # Paramètres de la loi dist = getattr(scipy.stats, dist_name) # Modéliser la loi param = dist.fit(data) loc = param[-2] scale = param[-1] arg = param[:-2] pdf = dist.pdf(x, loc=loc, scale=scale, *arg) plt.figure(figsize=(12,8)) plt.plot(x, pdf, label=dist_name, linewidth=3) plt.plot(x, y, alpha=0.6) plt.legend() plt.show() sse = np.sum((y - pdf)**2) dist_names = ['norm', 'beta','gamma', 'pareto', 't', 'lognorm', 'invgamma', 'invgauss', 'loggamma', 'alpha', 'chi', 'chi2'] sse = np.inf sse_thr = 0.10 # Pour chaque distribution for name in dist_names: # Modéliser dist = getattr(scipy.stats, name) param = dist.fit(data) # Paramètres loc = param[-2] scale = param[-1] arg = param[:-2] # PDF pdf = dist.pdf(x, *arg, loc=loc, scale=scale) # SSE model_sse = np.sum((y - pdf)**2) # Si le SSE est ddiminué, enregistrer la loi if model_sse < sse : best_pdf = pdf sse = model_sse best_loc = loc best_scale = scale best_arg = arg best_name = name # Si en dessous du seuil, quitter la boucle if model_sse < sse_thr : break plt.figure(figsize=(12,8)) plt.plot(x, y, label="Données") plt.plot(x, best_pdf, label=best_name, linewidth=3) plt.legend(loc='upper right') plt.show() # Détails sur la loi sélectionnée print("Selected Model : ", best_name) print("Loc. param. : ", best_loc) print("Scale param. : ", best_scale) print("Other arguments : ", best_arg) print("SSE : ", sse) y = y + np.random.randn(bins)/50
Source : https://www.stat4decision.com/fr/distribution-donnees-python/
Selected Model : beta
Loc. param. : 0.0018915993986550882
Scale param. : 244.81434016832407
Other arguments : (1.9738879264605056, 240.907229255242)
SSE : 0.05013791654188759
Application Web Interactive
Testé sous Anaconda et Python 3.7
pip install streamlit
streamlit run dist.py
Modéliser une distribution avec Python - dist.py - GitHub
Bienvenu, je m’appelle Eric Soupet et je suis l'administrateur du site elodees.com. elodees.com est un état de l'art de l'Intelligence Artificielle et se veut collaboratif, vous pouvez dès à présent proposer du contenu tels que des articles, des événements, des tutoriels, ... alors n'hésitez pas !
Crédit des images de la plate-forme : Pixabay - Pixabay License | Pexels - Pexels License