23 juillet 2019

IA et climat : démonstration pas à pas de la modélisation hydrologique de la Garonne

A propos de Callendar

Callendar est une start-up spécialisée dans l’utilisation des données climatiques et des techniques d’intelligence artificielle pour l’évaluation des risques liés au changement climatique. Notre mission est d’aider les entreprises et les organismes publics à prendre les bonnes décisions partout où le climat actuel ou futur compte. Nous proposons des résultats rapides, opérationnels et sur-mesure grâce à des méthodologies et des outils conçus pour allier réactivité et rigueur scientifique. Cette étude de cas propose un aperçu de notre utilisation de l’intelligence artificielle pour la réduction des risques climatiques.

Téléchargez notre plaquette     Nous contacter     

 

Contexte et objectifs

Le fonctionnement d’une centrale nucléaire nécessite l’accès permanent à une « source froide » permettant le refroidissement de la turbine et du réacteur. Lorsque cette source froide est un fleuve son efficacité peut être limitée par des aléas météorologiques, comme les vagues de chaleur et les sécheresses. Dans certains cas, une réduction de la production voire des arrêts de réacteurs peuvent devenir nécessaires.

Dans cette étude de cas, nous allons nous intéresser plus particulièrement au risque de sécheresse. On peut s’attendre à ce que la fréquence de ces événements évolue avec le changement climatique mais cette évolution est difficile à cerner a priori. En effet, les projections fournies par les modèles climatiques ne mettent pas en évidence de tendance nette au niveau national : l’évolution des cumuls de précipitations peut varier sensiblement d’une région à l’autre et au sein de l’année.

Pour quantifier ce risque, il faut donc évaluer l’évolution du débit tout au long de l’année en fonction des projections locales de précipitations. Ce type d’étude peut également être utile pour d’autres filières de production électrique, notamment fossile et hydraulique, mais aussi pour l’agriculture ou l’aménagement du territoire.

Méthodologie

Pour illustrer les données et les outils que Callendar peut mettre en œuvre, nous allons nous pencher sur le cas de la centrale nucléaire de Golfech située sur la Garonne, à 75km environ en aval de Toulouse.

Les modèles climatiques nous donnent des projections pour l’évolution de la température et des précipitations en amont de cette centrale au cours du XXIe siècle. Notre objectif est, à partir de ces projection, de déterminer l’évolution du débit de la Garonne à Golfech. La méthodologie classique pour ce type d’étude consiste à effectuer une modélisation pluie-débit du bassin versant. Des études de ce type ont été réalisées pour le compte d’EDF 1.

L’approche retenue par Callendar est différente : sur la base de données météorologiques et des relevés de débit historiques, nous utilisons des outils d’intelligence artificielle pour « apprendre » le lien entre les variables climatiques et le débit du fleuve. Une fois que cette relation est apprise, le modèle peut être utilisé pour prédire l’évolution du débit en fonction de celle des variables climatiques. C’est cette approche qui est détaillée ici.

Notre valeur ajoutée : L’utilisation d’un algorithme d’intelligence artificielle plutôt que d’une modélisation conventionnelle présente plusieurs intérêts. En particulier, elle réduit fortement le besoin de compétences spécialisées, notamment en hydrologie, et elle est instantanément réplicable partout où des données historiques suffisantes existent.

 

Source des données

Comme dans tout projet d’intelligence artificielle, l’accès  à des données suffisantes en quantité et en qualité est crucial. Dans notre cas, nous allons utiliser les données suivantes :

  • Données de débit : relevés quotidien effectués à la station de Lamagistère immédiatement en aval de la centrale de Golfech. Ces données sont disponibles depuis 1966 et actualisées en temps réel, elles sont accessibles via la Banque Hydro.
  • Données météorologiques : données de précipitations réanalysées, nous utilisons plus particulièrement le jeu d’indicateurs destinés au secteur de l’énergie sur la base d’ERA Interim. Ces données couvrent la période 1979-2016 pour l’ensemble de l’Europe avec une résolution spatiale de 0.5° en latitude comme en longitude, elles sont mises à disposition par Copernicus le programme européen d’observation spatiale.
  • Projections climatiques : les données climatiques prospectives peuvent notamment être issues du projet de modélisation du climat en haute résolution, CORDEX. Ces données sont accessibles via les partenaires du programme (l’utilisation des projections climatiques ne sera pas abordée dans cette étude de cas).

Notre valeur ajoutée : Callendar dispose d’une bonne connaissance des données utiles dans le cadre d’une étude comme celle-ci. Nous avons accès aux principales bases de données et nous disposons sur nos serveurs des jeux de données les plus fréquemment utilisées, ce qui nous permet de gagner du temps dans cette première phase de l’étude.

 

Pré-traitement des données

Les données obtenues sont sous des formats différents : NetCDF pour les données météorologiques et CSV pour les données de débit.Nous commençons par ouvrir les données météorologiques et sélectionner grossièrement le bassin versant la Garonne en amont de Golfech :

#Chargement des données météorologiques
path = "Précipitations_0m_24hr_1979-2016.nc"
DS = xr.open_dataset(path)
da = DS.tp

#Sélection approximative du bassin versant :
Lon_min = 0.5
Lon_max = 4
Lat_min = 42.5
Lat_max = 45.7
da = da.sel(longitude = slice(Lon_min, Lon_max))
da = da.sel(latitude = slice(Lat_max, Lat_min))

Nous allons utiliser notre algorithme d’apprentissage sur la période où nous disposons à la fois de données de débit et de données météorologiques. Dans ce cas, ce sont les données météorologiques qui nous contraignent puisqu’elles ne sont disponibles qu’entre le 1er janvier 1979 et le 31 décembre 2016. Nous récupérons ces dates :

debut = pd.to_datetime(str(da.time[0].values))
debut = date(debut.year, debut.month, debut.day)

fin = pd.to_datetime(str(da.time[-1].values))
fin = date(fin.year, fin.month, fin.day)

Nous ouvrons ensuite les données de débit dans un dataframe. La mise en forme de ces données est un peu particulière et elles vont nécessiter un pré-traitement avant de pouvoir être utilisées :

#Ouverture des données de débit
path = "debits_Lamagistere.csv"
df = pd.read_csv(path, encoding = "ISO-8859-1", header = 114, sep = ';')

#Suppression des colonnes vides
df = df.drop(df.iloc[:,[2*i for i in range(int(len(df.columns)/2)+1)]], axis = 1)

#Mise en forme
date = date(1967, 1, 1)
df_debit = pd.DataFrame(columns = ["Date", "Débit"])

while date.year < 2019:
    year = date.year
    j = 0
    while date.year == year:
        mois = date.month
        i = 0
        while date.month == mois:
            valeur = df.iloc[i][j]
            ligne = [date, valeur]
            df_debit.loc[len(df_debit)]= ligne

            date = date + timedelta(1)
            i = i + 1
        j = j+1
    df = df[73:]

Enfin, nous supprimons les données de débit avant le début et après la fin de la série météorologique :

df_debit = df_debit[df_debit["Date"]>=debut][df_debit["Date"]<=fin]

Nous disposons maintenant de deux jeux de données quotidiennes allant du 1er janvier 1979 au 31 décembre 2016, l’un avec le débit de la Garonne à Lamagistère l’autre avec les précipitations sur 42 points du territoire en aval de cette station.

Apprentissage machine

Notre objectif est d’établir la relation entre le débit à une date donnée et les précipitations pendant les n jours précédents. Cette relation peut s’écrire y = f(x) où y le débit au jour J et x un tableau contenant les précipitations de J-n à J sur chacun des 42 points du territoire sélectionnés.

Nous allons créer une liste X contenant toutes les valeurs de x à partir des données météorologiques que nous avons déjà chargées :

#Nombre de jours à prendre en compte
n = 20

#Création de X
X = []
date = debut+timedelta(n)

while date<=fin:
    da_date = da.sel(time=slice(date-timedelta(n), date))
    da_date = np.nan_to_num(da_date.values).flatten()
    X = X + [list(da_date)]
    date = date + timedelta(1)

Il nous faut également la liste Y de toutes les valeurs y, mais il suffit pour cela de renommer le dataframe des débits et de s’assurer que le format est bon :

#Création de Y
Y = list(df_debit[n:].Débit.astype('float'))

Nous allons retirer de ces données la dernière année. De cette façon, nous aurons des données que le modèle n’a jamais vu pour évaluer ses performances :

#Nombres de jours à garder pour tester le modèle
delta = 365

X_train = X[:-delta]
X_val = X[-delta:]

Y_train = Y[:-delta]
Y_val = Y[-delta:]

Nous disposons maintenant des données X_train, Y_train pour entrainer notre modèle et X_val, Y_val pour le valider.

Nous retenons pour l’instant un modèle linéaire très simple. Il nous suffit de le créer et de lui soumettre les données :

from sklearn import linear_model

model = linear_model.LinearRegression()
model.fit(X_train, Y_train)

Résultats et performances du modèle

Une fois que le modèle est entrainé (cela prend une fraction de seconde), nous pouvons l’utiliser pour prédire les débits pendant la période que nous avons gardé en réserve. Il suffit pour ça de lui soumettre les données X_val que nous avons mises de coté :

Y_predict = model.predict(X_val)

Cette prédiction se rapproche-t-elle de la réalité ? Il est possible de se faire une idée en comparant graphiquement le débit prédit, Y_predict, avec le débit mesuré, Y_val :

plt.plot(list(y_predict), label = "Prédiction")
plt.plot(Y_val, label = "Mesure")
plt.legend()

Voici le résultat :

La prédiction du débit par une intelligence artificielle aide à lutter contre le changement climatique en anticipant les crues et les sécheresses

Notre modèle semble donner au moins des tendances correctes pour l’évolution du débit. Une façon plus rigoureuse d’évaluer ses performances consiste à calculer son indice de Nash-Sutcliffe, un indicateur souvent utilisé par les hydrologues pour évaluer leurs modèles :

Nash = metrics.r2_score(Y_predict, Y_val)
print("Indice de Nash : ",Nash)

Nous obtenons un indice de 0.58. Un modèle hydrologique est généralement considéré comme acceptable si son indice de Nash dépasse 0.52 et un indice égal à 1 indique un modèle parfait. 

Conclusion

Cette étude de cas démontre qu’il est possible d’obtenir rapidement et simplement un modèle pluie-débit acceptable grâce à un algorithme d’apprentissage machine, sans connaissances préalables en hydrologie. L’intérêt essentiel de cette méthodologie réside dans sa reproductibilité : du moment que les données historiques existent, le code utilisé pourrait être repris pour une étude similaire sur n’importe laquelle des 4400 stations hydrométriques de France en l’espace de quelques minutes.

La performance du modèle obtenu est pour l’instant médiocre et inférieure à celle d’une modélisation hydrologique classique (l’étude citée en référence obtient un indice de Nash de 0.73). Nous travaillons à son amélioration, notamment avec l’utilisation d’un algorithme d’apprentissage plus adapté, la prise en compte de la témpérature dans les données d’entrée et une meilleure délimitation des bassins versants. Compte-tenu des développements en cours, nous sommes confiants que nous pourrons prochainement égaler ou dépasser les performances de modèles traditionnels pour une fraction du temps et de l’investissement nécessaire à leur mise au point.

 

Nous contacter sans engagement     Découvrir d’autres études de cas     

  1. Caractérisation hydrologique du bassin de la Garonne à l’aide d’un modèle pluie-débit global. [en ligne]
  2. Model evaluation guidelines for systematic quantification of accuracy in watershed simulation. [en ligne]