Skip to content

abdelbaki-bouzaienne/Modele-Predictif-Predire-Rendement-Production

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Modele Prédictif Prédire le Rendement de la Production

Activité pratique : Création d’un modèle prédictif complet pour le domaine agroalimentaire

Objectif : Prédire le rendement de la production dans une usine agroalimentaire à partir de différentes variables influençant la productivité. Le modèle utilisera des données simulées sur les conditions de production pour prédire le rendement de production (quantité produite en tonnes).

Contexte :

Imaginons que vous travaillez pour une usine agroalimentaire produisant des produits en grande quantité comme des biscuits, des boissons ou des produits laitiers. L’usine souhaite prédire le rendement de production sur une période donnée en fonction de plusieurs variables influençant la production, telles que :

  • Température (°C) : Température ambiante ou de cuisson.
  • Humidité (%) : Humidité dans l'usine, qui peut influencer la production, notamment pour les produits sensibles.
  • Vitesse de production (productions/heure) : La vitesse à laquelle la ligne de production fonctionne.
  • Durée de production (heures) : Temps total pendant lequel l'usine fonctionne.
  • Type de produit : Type de produit fabriqué (par exemple, biscuits, yaourts, etc.).

Nous allons créer un modèle prédictif pour estimer le rendement de production en fonction de ces variables.

Durée de l'activité : 2 à 3 heures

Prérequis :

  • Python et les bibliothèques pandas, numpy, matplotlib, seaborn, scikit-learn installées.
  • Connaissances de base en Python et en apprentissage automatique.

Étapes de l’activité :

Étape 1 : Créer et explorer le jeu de données

Nous allons d’abord créer un jeu de données simulé, contenant les variables que nous allons utiliser pour prédire le rendement de production.

python
Copier le code
import pandas as pd

# Création du jeu de données simulé data = { 'Température (°C)': [22, 25, 24, 28, 30, 21, 23, 27, 26, 29], 'Humidité (%)': [60, 55, 65, 70, 80, 75, 68, 74, 69, 72], 'Vitesse de production (productions/heure)': [100, 120, 110, 130, 140, 95, 105, 125, 115, 135], 'Durée de production (heures)': [8, 8, 7, 8, 9, 7, 8, 8, 9, 8], 'Type de produit': ['Biscuits', 'Biscuits', 'Yaourts', 'Yaourts', 'Boissons', 'Boissons', 'Yaourts', 'Boissons', 'Biscuits', 'Yaourts'], 'Rendement (tonnes)': [10, 12, 11, 14, 16, 9, 10, 13, 15, 14] # Rendement en tonnes }

# Charger les données dans un DataFrame df = pd.DataFrame(data)

# Afficher les premières lignes du jeu de données print(df.head())

Ce jeu de données contient 4 variables explicatives (Température, Humidité, Vitesse de production, Durée de production) et une variable cible (Rendement de production en tonnes).


Étape 2 : Exploration des données

Avant d'entraîner le modèle, il est important d'explorer et de comprendre les données :

  1. Vérification des dimensions du dataset :
python
Copier le code
# Dimensions du dataset print("Dimensions du dataset : ", df.shape)
  1. Statistiques descriptives :
python
Copier le code
# Statistiques descriptives print(df.describe())
  1. Vérification des valeurs manquantes :
python
Copier le code
# Vérifier les valeurs manquantes print(df.isnull().sum())
  1. Visualisation des relations entre les variables :

Pour mieux comprendre les relations entre les variables, nous pouvons utiliser des graphiques de dispersion.

python
Copier le code
import seaborn as sns import matplotlib.pyplot as plt

# Visualisation des relations entre les variables sns.pairplot(df, kind='scatter', hue='Type de produit') plt.show()


Étape 3 : Préparation des données pour l’entraînement

Nous devons convertir les variables catégorielles (comme "Type de produit") en variables numériques. Pour cela, nous utiliserons la méthode One-Hot Encoding. Ensuite, nous diviserons les données en ensembles d'entraînement et de test.

  1. Encodage des variables catégorielles :
python
Copier le code
# One-Hot Encoding pour la variable catégorielle "Type de produit" df_encoded = pd.get_dummies(df, columns=['Type de produit'], drop_first=True)

# Affichage des premières lignes du DataFrame encodé print(df_encoded.head())

  1. Séparation des variables explicatives et de la variable cible :
python
Copier le code
# Séparer les variables explicatives (features) et la variable cible (target) X = df_encoded.drop(columns=['Rendement (tonnes)']) y = df_encoded['Rendement (tonnes)']

# Diviser les données en ensemble d'entraînement (80%) et ensemble de test (20%) from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Vérification des dimensions après séparation print("Dimensions d'entraînement : ", X_train.shape, y_train.shape) print("Dimensions de test : ", X_test.shape, y_test.shape)


Étape 4 : Entraînement du modèle

Pour prédire un rendement en tonnes, nous allons utiliser un modèle de régression linéaire, car il s'agit d'un problème de régression (prédire une valeur continue).

python
Copier le code
from sklearn.linear_model import LinearRegression

# Créer et entraîner le modèle de régression linéaire model = LinearRegression() model.fit(X_train, y_train)

# Afficher les coefficients du modèle print("Coefficients du modèle : ", model.coef_) print("Intercept du modèle : ", model.intercept_)


Étape 5 : Évaluation du modèle

Une fois le modèle entraîné, nous allons effectuer des prédictions sur l'ensemble de test et évaluer sa performance à l'aide de l'erreur quadratique moyenne (MSE) et de la r2 (coefficient de détermination).

python
Copier le code
from sklearn.metrics import mean_squared_error, r2_score

# Faire des prédictions sur l'ensemble de test y_pred = model.predict(X_test)

# Calculer l'erreur quadratique moyenne (MSE) mse = mean_squared_error(y_test, y_pred) print("Erreur quadratique moyenne (MSE) : ", mse)

# Calculer le coefficient de détermination R2 r2 = r2_score(y_test, y_pred) print("Coefficient de détermination R2 : ", r2)

Interprétation :

  • Un MSE faible indique que le modèle fait de bonnes prédictions.
  • Le R2 est une mesure de la qualité de l'ajustement. Un R2 proche de 1 indique que le modèle explique bien la variabilité des données.

Étape 6 : Visualisation des résultats

Il est toujours utile de visualiser les prédictions pour comprendre la performance du modèle. Utilisez un graphique de type scatter plot pour comparer les valeurs réelles avec les valeurs prédites.

python
Copier le code
# Visualisation des résultats plt.scatter(y_test, y_pred) plt.xlabel('Valeurs réelles') plt.ylabel('Valeurs prédites') plt.title('Rendement réel vs prédit') plt.show()

Interprétation :

  • Si les points sont proches de la ligne diagonale (45°), cela signifie que le modèle a une bonne précision.
  • Si les points sont dispersés, cela suggère que le modèle n'est pas performant.

Étape 7 : Améliorations possibles

Si la performance du modèle n'est pas satisfaisante, plusieurs améliorations peuvent être envisagées :

  1. Ajouter de nouvelles fonctionnalités :

    • Type d’ingrédients (par exemple, des ingrédients spécifiques peuvent affecter le rendement).
    • Conditions météorologiques externes (si les usines sont sensibles aux conditions extérieures).
    • Historique de production (informations sur les performances passées de la production).
  2. Essayer d'autres modèles :

    • Arbres de décision ou forêts aléatoires pour capturer des relations non linéaires.
    • Régression Ridge/Lasso pour traiter des problèmes de multicolinéarité.
    • Réseaux neuronaux pour des modèles plus complexes, mais qui nécessitent plus de données et de puissance de calcul.

Exemple pour un modèle de forêt aléatoire :

python
Copier le code
from sklearn.ensemble import RandomForestRegressor

# Créer et entraîner un modèle de forêt aléatoire rf_model = RandomForestRegressor(n_estimators=100, random_state=42) rf_model.fit(X_train, y_train)

# Faire des prédictions avec le modèle de forêt aléatoire y_rf_pred = rf_model.predict(X_test)

# Évaluer le modèle rf_mse = mean_squared_error(y_test, y_rf_pred) rf_r2 = r2_score(y_test, y_rf_pred) print("Forêt Aléatoire - MSE : ", rf_mse) print("Forêt Aléatoire - R2 : ", rf_r2)


Conclusion :

Dans cette activité, nous avons créé un modèle prédictif pour prédire le rendement de production dans le secteur agroalimentaire. Nous avons exploré les données, préparé les caractéristiques pour l’entraînement, créé un modèle de régression linéaire, et évalué ses performances. Ensuite, nous avons suggéré des pistes d’améliorations pour optimiser le modèle et améliorer ses performances.

Bon Travail

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors