Modèle de prévision météo personnalisé utilisant ML Net / Blogs / Perficient

De nos jours, l’IA est un domaine crucial avec divers frameworks comme ML.NET qui peuvent être utilisés pour créer des applications étonnantes à l’aide de modèles prédéfinis provenant de fournisseurs de cloud. Il est important d’apprendre comment ces services fonctionnent en coulisses, comment créer des modèles personnalisés et comprendre comment votre application peut interagir avec les frameworks d’IA au-delà des seuls fournisseurs de cloud ou de la source des services d’IA.
Comment puis-je utiliser ML Net ?
ML Net peut être utilisé avec Visual Studio 2019 ou version ultérieure, en utilisant n’importe quelle version de Visual Studio, et peut également être utilisé par Visual Studio Code, mais ne fonctionne que sur un système d’exploitation Windows. Ses prérequis sont :
- Visual Studio 2022 ou Visual Studio 2019.
- SDK .NET Core 3.1 ou version ultérieure.
Image 1 : Programme d’installation de Visual Studio, les détails d’installation contiennent le générateur ML Net Model
Image 2 : Menu contextuel de Visual Studio
Après avoir ajouté le composant ML Net à votre projet, vous pouvez voir un assistant qui vous permet de configurer votre modèle selon vos besoins (Image 3).
Image 3 : Assistant ML NET
Présentation de l’application
L’application commence par les groupes météorologiques, chaque élément contient une plage de température, un bouton pour rechercher les données historiques et une prévision (Image 4).
Image 4 : Page principale des prévisions météorologiques.
La source de ces groupes est une table nommée Météo avec les attributs :
- Identifiant : clé primaire
- Description : c’est la description du groupe, vous pouvez la voir comme titre des cartes dans l’image 4
- MinRange : La température minimale appartient au groupe.
- MaxRange : Température maximale à laquelle appartient le groupe.
Le bouton « Historique » affiche un tableau avec toutes les données historiques paginées. Les données historiques contiennent la date au format (aaaa-mm-jj), la température et si la journée était nuageuse (Image 5).
Image 5 : Page historique des prévisions météorologiques.
L’option de prévision permet aux utilisateurs de générer leur propre prédiction à l’aide de ML Net via un point de terminaison d’API. Les données d’entrée correspondent au nombre de jours à partir d’aujourd’hui que l’utilisateur prédira et si la journée sera nuageuse (Image 6).
Image 6 : page de prédiction
Le résultat de l’API est la date, le groupe et le pourcentage de probabilité que la date appartienne au groupe. Il affiche également un tableau avec le pourcentage de probabilité de chaque groupe.
Modèle
Dans le monde réel, il y a de nombreuses variables à garder à l’esprit si vous souhaitez mettre en œuvre une application de prévision météo, telles que la vitesse du vent, la température, la saison, l’humidité, si le temps était nuageux, etc.(2)
La portée de cette approche est de voir comment ML Net peut résoudre un modèle personnalisé ; par conséquent, un modèle personnalisé simple a été créé, basé sur la température et la saison et si la journée est nuageuse, le modèle utilise la météo comme groupe de différentes prévisions, alors le modèle de formation personnalisé a été conçu comme suit (Image 7) :
- Météo (Id) : Chaque mérou a un identifiant, donc l’étiquette permettant de le prédire est l’ID.
- Date : c’est la caractéristique de la date liée à la météo
- IsCloudy : c’est une fonctionnalité booléenne qui indique la relation entre la météo et les nuages.
- Saison (Id) : c’est une fonctionnalité qui indique la relation entre la météo et la saison (chaque saison a un identifiant)
Image 7 : Section des données de formation de l’assistant ML Net
Vous pouvez obtenir les données à partir de fichiers, de bases de données SQL Server. Dans ce cas, les données ont été collectées à partir d’une vue sur SQL Server.
Présentation de l’architecture du projet
Les prévisions météo comportent 2 sites, un front-end et un back-end, les données ont été stockées dans une base de données SQL Server (Image 8). Avec cette approche globale, le système a été conçu pour séparer les responsabilités de la logique métier, des données et de l’expérience utilisateur.
Image 8 : Sites et base de données
L’extrémité avant
Vous pouvez trouver le référentiel d’applications sur GitHub en utilisant l’URL suivante : https://github.com/joseflorezr/trainingangularversion
Le référentiel frontal contient une solution angulaire 18, qui utilise des matériaux angulaires pour aider à améliorer l’expérience utilisateur et le routage pour la navigation. La solution contient les composants suivants (image 9) :
- En-tête de prévision : Composant supérieur de la page, il affiche le titre avec son style.
- Prévision-prédiction : Contient le formulaire de prévisions météorologiques et affiche les résultats.
- Résultats prévisionnels : Contient les données historiques.
- Météo: Affiche les groupes de prévisions météo
- Services: Se connecte à l’API pour obtenir la météo, les prévisions et les prédictions
- Modèle: interfaces qui correspondent à l’API
Image 9 : Composants frontaux
Back-end
Vous pouvez trouver le référentiel d’applications sur GitHub en utilisant l’URL suivante : https://github.com/joseflorezr/WebApiMlNetWeatherForecast.
Image 10 : Composants back-end
La solution API contient les projets suivants :
- TestWebAPi : API Web avec les points de terminaison, contient 3 contrôleurs, Météo, Prévisions et WeatherForecast. WeatherForecast est une classe abstraite avec le logger et l’injection de référence de cas d’utilisation.
- Business : contient les classes qui contiennent la logique métier, basée sur l’approche des cas d’utilisation (4).
- Modèle : il s’agit de l’abstraction des objets du domaine tels que la météo, les prévisions, la saison et les prévisions.
- Données : Cette bibliothèque contient 2 parties :
- L’intégration au niveau des données, le contexte avec Entity Framework pour accéder à la base de données.
- Lors de l’intégration avec ML Net, après avoir été ajoutés à la solution, certains fichiers de support ont été échafaudés avec le même nom mais des descriptions différentes, dans ce cas, le fichier est MLForecastModel :
- mbconfig : contient l’assistant qui permet de modifier les paramètres.
- consommation : une classe partielle qui permet une interaction avec le modèle.
- évaluer : une classe partielle qui permet de calculer les métriques
- mlnetl : ce fichier contient la base de connaissances ; il est important de partager le fichier au niveau de l’API.
- formation : ajoute les méthodes de formation qui prennent en charge la création du fichier.
Projet de base de données(3)
Les données ont été construites en faisant abstraction des concepts de Météo et de Saison comme entités principales avec leur description, sinon Forecast c’est le tableau historique qui contient les informations pour une date spécifique (1 ligne par jour) l’observation, c’est-à-dire la température, la saison id puis l’identifiant météo.
Visual Studio contient un projet de base de données qui permet aux développeurs de créer, modifier et déployer des bases de données, et peut exécuter des scripts après le déploiement. Pour créer le modèle ML Net, une vue nommée WeatherForecast a été utilisée car il est plus facile de se connecter à l’assistant ML Net. L’image 11 montre la relation entre les tables.
Image 11 : Diagramme de base de données
Les projets de base de données peuvent être déployés à l’aide de l’outil de comparaison de schéma SQL. Il existe un script de post-construction qui crée les données dans le modèle de base de données. Pour cette application, un script a été exécuté pour simuler les données de prévision du 01/01/1900 au 04/06/2024. Le script utilise des données aléatoires, les résultats doivent donc être différents chaque fois que vous remplissez le tableau de prévisions.
La vue WeatherForecast concentre les données utilisées par ML Net pour créer le modèle.
Projet API
Le projet API expose les points de terminaison qui prennent en charge l’obtention des groupes (Weather Controller), l’obtention des données de prévision historiques (Forecast Controller) et la prévision (Forecast Controller).
Image 12 : Swagger de l’API Web
Note: Le fichier ML net doit être ajouté en tant que ressource de l’API car la classe MLForecastModel, au moment où l’API utilise la fonctionnalité de prédiction, essaie de regarder le fichier sur un chemin spécifique (il peut être modifié).
Image 13 : Emplacement du fichier ML Net
Projet modèle
Contient les DTO qui peuvent être transférés au Front-end, essentiellement, l’entité météo a la description du groupe et les plages de température, la saison contient la description des mois de début et de fin, la prévision a la température, la date si le jour était nuageux et id, PredictedForecast hérite des prévisions et du score, et une description météo a été ajoutée (Image 14).
Image 14 : Entités
En gros, ML Net crée la classe MLForecastModel, elle contient les méthodes pour utiliser le modèle de prédiction (le résultat est différent pour le scénario choisi), mais en termes généraux, l’idée est d’envoyer un objet Input (défini par ML Net) et de recevoir résultats comme suit :
- Pour un seul objet, utilisez la méthode Predict, elle renverra le score de l’étiquette prédite.
- Si vous souhaitez obtenir les étiquettes, utilisez la méthode GetLabels, elle renverra toutes les étiquettes sous forme de IEnumerable.
- Si vous souhaitez évaluer toutes les étiquettes, PredictAllLabels est la méthode, elle renverra un IEnumerable trié avec des paires clé-valeur (étiquette et score)
- Si vous souhaitez mapper un résultat sans étiquette, utilisez GetSortedScoresWithLabels, il renverra un IEnumerable trié avec des paires clé-valeur (étiquette et score)
La méthode PredictAsync (Image 15), crée l’objet d’entrée, en commençant par l’entrée utilisateur (id, jours, nuageux), elle obtient la date projetée, ajoute les jours, puis trouve l’ID de saison en fonction du mois (GetSeasonMethod). Une fois le projet d’entrée terminé, la méthode choisie à utiliser était PredictAllLabels. Dans ce cas, l’étiquette est un identifiant météo, il était donc nécessaire d’obtenir la description de la base de données pour chaque étiquette donnée.
Image 15 : Implémentation de PredictAsync
Résumé
- Vous pouvez utiliser ML NET pour créer vos propres modèles de Machine Learning et les utiliser dans le cadre de votre solution API.
- Il existe plusieurs options (scénarios) parmi lesquelles choisir en fonction de vos besoins.
- Les modèles peuvent être créés à l’aide de diverses sources, telles que des objets de base de données ou des fichiers.
Références
- https://learn.microsoft.com/en-us/dotnet/machine-learning/how-does-mldotnet-work
- https://content.meteoblue.com/en/research-education/spécifications/weather-variables
- https://visualstudio.microsoft.com/vs/features/ssdt/
- https://medium.com/@pooja0403keshri/clean-architecture-a-comprehensive-guide-with-c-676beed5bdbb
- https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-8.0
Source link