!pip install statsmodels==0.12.2
Requirement already satisfied: statsmodels==0.12.2 in /root/venv/lib/python3.7/site-packages (0.12.2)
Requirement already satisfied: numpy>=1.15 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from statsmodels==0.12.2) (1.19.5)
Requirement already satisfied: pandas>=0.21 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from statsmodels==0.12.2) (1.2.4)
Requirement already satisfied: patsy>=0.5 in /root/venv/lib/python3.7/site-packages (from statsmodels==0.12.2) (0.5.1)
Requirement already satisfied: scipy>=1.1 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from statsmodels==0.12.2) (1.6.2)
Requirement already satisfied: python-dateutil>=2.7.3 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from pandas>=0.21->statsmodels==0.12.2) (2.8.1)
Requirement already satisfied: pytz>=2017.3 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from pandas>=0.21->statsmodels==0.12.2) (2021.1)
Requirement already satisfied: six in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from patsy>=0.5->statsmodels==0.12.2) (1.15.0)
WARNING: You are using pip version 21.0.1; however, version 21.1.1 is available.
You should consider upgrading via the '/root/venv/bin/python -m pip install --upgrade pip' command.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import math
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.tsa.api as smt
import statsmodels.api as sm
import itertools
import sys
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
df = pd.read_csv("IPC.csv", delimiter = ";")
mois_str = df["Libellé"][2:]
indices = df["Indice des prix à la consommation - Base 2015 - Ensemble des ménages - France - Ensemble"][2:]
# mois_int permet de convertir les mois en entiers
mois = []
cpt = 1
for i in mois_str:
mois.append(cpt)
cpt+=1
mois = np.array(mois)
plt.figure(figsize=(13, 6))
plt.plot(indices, 'b--', linewidth=1)
plt.title("Evolution mensuel de l'IPC")
plt.xlabel('Mois', fontsize=18)
plt.ylabel('Indice', fontsize=18)
plt.grid(True)
plt.show
import statistics
import math
moyenne = statistics.mean(indices)
mediane = np.median(indices)
q1 = np.quantile(indices, .25)
q3 = np.quantile(indices, .75)
var = np.var(indices)
ectype = math.sqrt(var)
CV = ectype/moyenne
plt.figure(figsize=(13, 6))
plt.plot(indices, 'b--', linewidth=1)
plt.axhline(y=moyenne, color = "red")
plt.axhline(y=mediane, color = "purple")
plt.axhline(y=q1, color = "green")
plt.axhline(y=q3, color = "green")
#plt.title("Evolution des ventes par jour")
plt.xlabel('Mois', fontsize=18)
plt.ylabel('Indice', fontsize=18)
plt.grid(True)
plt.legend(("Quantité", "Moyenne", "Médiane", "Quartiles"))
plt.show
print("moyenne = ", moyenne)
print("médiane = ", mediane)
print("Q1 = ", q1)
print("Q3 = ", q3)
print("variance = ", var)
print("écart type = ", ectype)
print("coefficient de variation = ", CV)
moyenne = 88.45365650969529
médiane = 88.89
Q1 = 78.2
Q3 = 99.48
variance = 119.84991848589254
écart type = 10.947598754333871
coefficient de variation = 0.12376649181409384
!pip install statsmodels==0.12.2
Requirement already satisfied: statsmodels==0.12.2 in /root/venv/lib/python3.7/site-packages (0.12.2)
Requirement already satisfied: scipy>=1.1 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from statsmodels==0.12.2) (1.6.2)
Requirement already satisfied: patsy>=0.5 in /root/venv/lib/python3.7/site-packages (from statsmodels==0.12.2) (0.5.1)
Requirement already satisfied: pandas>=0.21 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from statsmodels==0.12.2) (1.2.4)
Requirement already satisfied: numpy>=1.15 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from statsmodels==0.12.2) (1.19.5)
Requirement already satisfied: pytz>=2017.3 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from pandas>=0.21->statsmodels==0.12.2) (2021.1)
Requirement already satisfied: python-dateutil>=2.7.3 in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from pandas>=0.21->statsmodels==0.12.2) (2.8.1)
Requirement already satisfied: six in /shared-libs/python3.7/py-core/lib/python3.7/site-packages (from patsy>=0.5->statsmodels==0.12.2) (1.15.0)
WARNING: You are using pip version 21.0.1; however, version 21.1.1 is available.
You should consider upgrading via the '/root/venv/bin/python -m pip install --upgrade pip' command.
from statsmodels.tsa.tsatools import detrend
from scipy import stats
import matplotlib.pyplot as plt
train_mois = mois[:300]
train_indices = indices[:300]
slope, intercept, r_value, p_value, std_error = stats.linregress(train_mois, train_indices)
def predict(x):
return slope * x + intercept
lin_reg = predict(mois)
fig_trend = plt.figure(figsize=(13, 6))
plt.plot(mois, indices, 'b--', linewidth=1)
plt.plot(mois, lin_reg, 'g-', linewidth=1)
plt.title("Tendance linéaire")
plt.xlabel('Mois', fontsize=18)
plt.ylabel('Incide', fontsize=18)
plt.grid(True)
plt.show
print("y = ", slope,"x ", intercept)
y = 0.11044066711852354 x 68.88794626532886
detrend_indices = indices - lin_reg
fig_trend = plt.figure(figsize=(13, 6))
plt.plot(mois, detrend_indices, 'b--', linewidth=1)
plt.title("Série corrigée de sa tendance")
plt.xlabel('Mois', fontsize=18)
plt.ylabel('indice', fontsize=18)
plt.grid(True)
plt.show
indices_diff_seas = [a-b for a, b in zip(indices[11:], indices[:-11])]
annee2 = np.mean(detrend_indices[16:27])
annee3 = np.mean(detrend_indices[28:39])
annee4 = np.mean(detrend_indices[40:51])
annee5 = np.mean(detrend_indices[52:63])
annee6 = np.mean(detrend_indices[64:75])
annee7 = np.mean(detrend_indices[76:87])
annee8 = np.mean(detrend_indices[88:99])
annee9 = np.mean(detrend_indices[100:111])
annee10 = np.mean(detrend_indices[112:123])
annee11 = np.mean(detrend_indices[124:135])
annee12 = np.mean(detrend_indices[136:147])
annee13 = np.mean(detrend_indices[148:159])
annee14 = np.mean(detrend_indices[160:171])
annee15 = np.mean(detrend_indices[172:183])
annee16 = np.mean(detrend_indices[184:195])
annee17 = np.mean(detrend_indices[196:207])
annee18 = np.mean(detrend_indices[208:219])
annee19 = np.mean(detrend_indices[220:231])
annee20 = np.mean(detrend_indices[232:243])
annee21 = np.mean(detrend_indices[244:255])
annee22 = np.mean(detrend_indices[256:267])
annee23 = np.mean(detrend_indices[268:279])
annee24 = np.mean(detrend_indices[280:291])
seas1 = np.mean([detrend_indices[16]-annee2, detrend_indices[28]-annee3, detrend_indices[40]-annee4, detrend_indices[52]-annee5, detrend_indices[64]-annee6, detrend_indices[76]-annee7, detrend_indices[88]-annee8, detrend_indices[100]-annee9, detrend_indices[112]-annee10, detrend_indices[124]-annee11, detrend_indices[136]-annee12, detrend_indices[148]-annee13, detrend_indices[160]-annee14, detrend_indices[172]-annee15, detrend_indices[184]-annee16, detrend_indices[196]-annee17, detrend_indices[208]-annee18, detrend_indices[220]-annee19, detrend_indices[232]-annee20, detrend_indices[244]-annee21, detrend_indices[256]-annee22, detrend_indices[268]-annee23, detrend_indices[280]-annee24])
seas2 = np.mean([detrend_indices[17]-annee2, detrend_indices[29]-annee3, detrend_indices[41]-annee4, detrend_indices[53]-annee5, detrend_indices[65]-annee6, detrend_indices[77]-annee7, detrend_indices[89]-annee8, detrend_indices[101]-annee9, detrend_indices[113]-annee10, detrend_indices[125]-annee11, detrend_indices[137]-annee12, detrend_indices[149]-annee13, detrend_indices[161]-annee14, detrend_indices[173]-annee15, detrend_indices[185]-annee16, detrend_indices[197]-annee17, detrend_indices[209]-annee18, detrend_indices[221]-annee19, detrend_indices[233]-annee20, detrend_indices[245]-annee21, detrend_indices[257]-annee22, detrend_indices[269]-annee23, detrend_indices[281]-annee24])
seas3 = np.mean([detrend_indices[18]-annee2, detrend_indices[30]-annee3, detrend_indices[42]-annee4, detrend_indices[54]-annee5, detrend_indices[66]-annee6, detrend_indices[78]-annee7, detrend_indices[90]-annee8, detrend_indices[102]-annee9, detrend_indices[114]-annee10, detrend_indices[126]-annee11, detrend_indices[138]-annee12, detrend_indices[150]-annee13, detrend_indices[162]-annee14, detrend_indices[174]-annee15, detrend_indices[186]-annee16, detrend_indices[198]-annee17, detrend_indices[210]-annee18, detrend_indices[222]-annee19, detrend_indices[234]-annee20, detrend_indices[246]-annee21, detrend_indices[258]-annee22, detrend_indices[270]-annee23, detrend_indices[282]-annee24])
seas4 = np.mean([detrend_indices[19]-annee2, detrend_indices[31]-annee3, detrend_indices[43]-annee4, detrend_indices[55]-annee5, detrend_indices[67]-annee6, detrend_indices[79]-annee7, detrend_indices[91]-annee8, detrend_indices[103]-annee9, detrend_indices[115]-annee10, detrend_indices[127]-annee11, detrend_indices[139]-annee12, detrend_indices[151]-annee13, detrend_indices[163]-annee14, detrend_indices[175]-annee15, detrend_indices[187]-annee16, detrend_indices[199]-annee17, detrend_indices[211]-annee18, detrend_indices[223]-annee19, detrend_indices[235]-annee20, detrend_indices[247]-annee21, detrend_indices[259]-annee22, detrend_indices[271]-annee23, detrend_indices[283]-annee24])
seas5 = np.mean([detrend_indices[20]-annee2, detrend_indices[32]-annee3, detrend_indices[44]-annee4, detrend_indices[56]-annee5, detrend_indices[68]-annee6, detrend_indices[80]-annee7, detrend_indices[92]-annee8, detrend_indices[104]-annee9, detrend_indices[116]-annee10, detrend_indices[128]-annee11, detrend_indices[140]-annee12, detrend_indices[152]-annee13, detrend_indices[164]-annee14, detrend_indices[176]-annee15, detrend_indices[188]-annee16, detrend_indices[200]-annee17, detrend_indices[212]-annee18, detrend_indices[224]-annee19, detrend_indices[236]-annee20, detrend_indices[248]-annee21, detrend_indices[260]-annee22, detrend_indices[272]-annee23, detrend_indices[284]-annee24])
seas6 = np.mean([detrend_indices[21]-annee2, detrend_indices[33]-annee3, detrend_indices[45]-annee4, detrend_indices[57]-annee5, detrend_indices[69]-annee6, detrend_indices[81]-annee7, detrend_indices[93]-annee8, detrend_indices[105]-annee9, detrend_indices[117]-annee10, detrend_indices[129]-annee11, detrend_indices[141]-annee12, detrend_indices[153]-annee13, detrend_indices[165]-annee14, detrend_indices[177]-annee15, detrend_indices[189]-annee16, detrend_indices[201]-annee17, detrend_indices[213]-annee18, detrend_indices[225]-annee19, detrend_indices[237]-annee20, detrend_indices[249]-annee21, detrend_indices[261]-annee22, detrend_indices[273]-annee23, detrend_indices[285]-annee24])
seas7 = np.mean([detrend_indices[22]-annee2, detrend_indices[34]-annee3, detrend_indices[46]-annee4, detrend_indices[58]-annee5, detrend_indices[70]-annee6, detrend_indices[82]-annee7, detrend_indices[94]-annee8, detrend_indices[106]-annee9, detrend_indices[118]-annee10, detrend_indices[130]-annee11, detrend_indices[142]-annee12, detrend_indices[154]-annee13, detrend_indices[166]-annee14, detrend_indices[178]-annee15, detrend_indices[190]-annee16, detrend_indices[202]-annee17, detrend_indices[214]-annee18, detrend_indices[226]-annee19, detrend_indices[238]-annee20, detrend_indices[250]-annee21, detrend_indices[262]-annee22, detrend_indices[274]-annee23, detrend_indices[286]-annee24])
seas8 = np.mean([detrend_indices[23]-annee2, detrend_indices[35]-annee3, detrend_indices[47]-annee4, detrend_indices[59]-annee5, detrend_indices[71]-annee6, detrend_indices[83]-annee7, detrend_indices[95]-annee8, detrend_indices[107]-annee9, detrend_indices[119]-annee10, detrend_indices[131]-annee11, detrend_indices[143]-annee12, detrend_indices[155]-annee13, detrend_indices[167]-annee14, detrend_indices[179]-annee15, detrend_indices[191]-annee16, detrend_indices[203]-annee17, detrend_indices[215]-annee18, detrend_indices[227]-annee19, detrend_indices[239]-annee20, detrend_indices[251]-annee21, detrend_indices[263]-annee22, detrend_indices[275]-annee23, detrend_indices[287]-annee24])
seas9 = np.mean([detrend_indices[24]-annee2, detrend_indices[36]-annee3, detrend_indices[48]-annee4, detrend_indices[60]-annee5, detrend_indices[72]-annee6, detrend_indices[84]-annee7, detrend_indices[96]-annee8, detrend_indices[108]-annee9, detrend_indices[120]-annee10, detrend_indices[132]-annee11, detrend_indices[144]-annee12, detrend_indices[156]-annee13, detrend_indices[168]-annee14, detrend_indices[180]-annee15, detrend_indices[192]-annee16, detrend_indices[204]-annee17, detrend_indices[216]-annee18, detrend_indices[228]-annee19, detrend_indices[240]-annee20, detrend_indices[252]-annee21, detrend_indices[264]-annee22, detrend_indices[276]-annee23, detrend_indices[288]-annee24])
seas10 = np.mean([detrend_indices[25]-annee2, detrend_indices[37]-annee3, detrend_indices[49]-annee4, detrend_indices[61]-annee5, detrend_indices[73]-annee6, detrend_indices[85]-annee7, detrend_indices[97]-annee8, detrend_indices[109]-annee9, detrend_indices[121]-annee10, detrend_indices[133]-annee11, detrend_indices[145]-annee12, detrend_indices[157]-annee13, detrend_indices[169]-annee14, detrend_indices[181]-annee15, detrend_indices[193]-annee16, detrend_indices[205]-annee17, detrend_indices[217]-annee18, detrend_indices[229]-annee19, detrend_indices[241]-annee20, detrend_indices[253]-annee21, detrend_indices[265]-annee22, detrend_indices[277]-annee23, detrend_indices[289]-annee24])
seas11 = np.mean([detrend_indices[26]-annee2, detrend_indices[38]-annee3, detrend_indices[50]-annee4, detrend_indices[62]-annee5, detrend_indices[74]-annee6, detrend_indices[86]-annee7, detrend_indices[98]-annee8, detrend_indices[110]-annee9, detrend_indices[122]-annee10, detrend_indices[134]-annee11, detrend_indices[146]-annee12, detrend_indices[158]-annee13, detrend_indices[170]-annee14, detrend_indices[182]-annee15, detrend_indices[194]-annee16, detrend_indices[206]-annee17, detrend_indices[219]-annee18, detrend_indices[230]-annee19, detrend_indices[242]-annee20, detrend_indices[254]-annee21, detrend_indices[266]-annee22, detrend_indices[278]-annee23, detrend_indices[290]-annee24])
seas12 = np.mean([detrend_indices[27]-annee2, detrend_indices[39]-annee3, detrend_indices[51]-annee4, detrend_indices[63]-annee5, detrend_indices[75]-annee6, detrend_indices[87]-annee7, detrend_indices[99]-annee8, detrend_indices[111]-annee9, detrend_indices[123]-annee10, detrend_indices[135]-annee11, detrend_indices[147]-annee12, detrend_indices[159]-annee13, detrend_indices[171]-annee14, detrend_indices[183]-annee15, detrend_indices[195]-annee16, detrend_indices[207]-annee17, detrend_indices[220]-annee18, detrend_indices[231]-annee19, detrend_indices[243]-annee20, detrend_indices[255]-annee21, detrend_indices[267]-annee22, detrend_indices[279]-annee23, detrend_indices[291]-annee24])
seas = [seas8, seas9, seas10, seas11, seas12, seas1, seas2, seas3, seas4, seas5, seas6, seas7, seas8, seas9, seas10, seas11, seas12, seas1, seas2, seas3, seas4, seas5, seas6, seas7, seas8, seas9, seas10, seas11, seas12, seas1, seas2, seas3, seas4, seas5, seas6, seas7, seas8, seas9, seas10, seas11, seas12, seas1, seas2, seas3, seas4, seas5, seas6, seas7, seas8, seas9, seas10, seas11, seas12, seas1, seas2, seas3, seas4, seas5, seas6, seas7, seas8]
print(seas)
fig = plt.figure(figsize=(13, 6))
#plt.plot(mois, indices, 'b-', linewidth=1)
plt.plot(mois[11:], indices_diff_seas, 'g-', linewidth=2)
plt.title("Série IPC corrigée de sa tendance désaisonnalisée par différenciation")
plt.xlabel('Mois', fontsize=18)
plt.ylabel('indice', fontsize=18)
plt.grid(True)
[-0.07770750988142434, -0.34684382917386086, -0.1320671049880356, 0.16877741627959256, 0.220945444813243, 0.3132032469047638, 0.2527625797862414, -0.04246069602793534, 0.06448994120136808, 0.01796231756110439, -0.018565306079157896, -0.10770162537159504, -0.07770750988142434, -0.34684382917386086, -0.1320671049880356, 0.16877741627959256, 0.220945444813243, 0.3132032469047638, 0.2527625797862414, -0.04246069602793534, 0.06448994120136808, 0.01796231756110439, -0.018565306079157896, -0.10770162537159504, -0.07770750988142434, -0.34684382917386086, -0.1320671049880356, 0.16877741627959256, 0.220945444813243, 0.3132032469047638, 0.2527625797862414, -0.04246069602793534, 0.06448994120136808, 0.01796231756110439, -0.018565306079157896, -0.10770162537159504, -0.07770750988142434, -0.34684382917386086, -0.1320671049880356, 0.16877741627959256, 0.220945444813243, 0.3132032469047638, 0.2527625797862414, -0.04246069602793534, 0.06448994120136808, 0.01796231756110439, -0.018565306079157896, -0.10770162537159504, -0.07770750988142434, -0.34684382917386086, -0.1320671049880356, 0.16877741627959256, 0.220945444813243, 0.3132032469047638, 0.2527625797862414, -0.04246069602793534, 0.06448994120136808, 0.01796231756110439, -0.018565306079157896, -0.10770162537159504, -0.07770750988142434]
prev_t = [a * slope + intercept for a in mois[300:]]
prev_ts = [prev_t[i] + seas[i] for i in range(61)]
fig_trend = plt.figure(figsize=(13, 6))
plt.plot(mois[300:], indices[300:], 'b--', linewidth=1)
plt.plot(mois[300:], prev_ts, 'g-', linewidth=1)
plt.title("Prévisions du modèle crée")
plt.xlabel('Mois', fontsize=18)
plt.ylabel('Incide', fontsize=18)
plt.grid(True)
plt.show
erreur = np.mean([np.sqrt((a-b)**2) for a in prev_ts[:] for b in indices[300:]])
print("Racine de l'erreur au carré :", erreur)
Racine de l'erreur au carré : 3.0008016227830425
import statsmodels.api as sm
model = sm.tsa.statespace.SARIMAX(indices, order=(2,1,1),seasonnal_order=(0,0,0,12), trend=('ct'))
res=model.fit()
pred = res.get_prediction(start = 350,
end = 362,
dynamic = False,
full_results=True)
mois_prev = mois
mois_prev=[a for a in range(363)]
plt.figure(figsize=(13, 6))
plt.plot(mois[349:], indices[349:], 'b--', linewidth=2)
plt.plot(mois_prev[350:],pred.predicted_mean[:], 'g-', linewidth=3)
plt.title("Prévisions ARIMA (2,1,1)")
plt.xlabel('Mois', fontsize=18)
plt.ylabel('Indice', fontsize=18)
plt.grid(True)
plt.show
erreur = np.mean([np.sqrt((a-b)**2) for a in pred.predicted_mean[:-1] for b in indices[349:]])
print("Racine de l'erreur au carré :", erreur)
Racine de l'erreur au carré : 0.37448064291410277
train = indices[0:350]
test = indices[350:]
def preparation_data(data, lags=1):
X, y = [], []
for row in range(len(data) - lags - 1):
a = data[row:(row + lags)]
X.append(a)
y.append(data[row + lags])
return np.array(X), np.array(y)
np.random.seed(1)
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(pd.DataFrame(indices))
train = dataset[0:300,]
test = dataset[300:,]
lags = 1
X_train, y_train = preparation_data(train, lags)
X_test, y_test = preparation_data(test, lags)
X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))
mdl = Sequential()
mdl.add(Dense(12, input_shape=(1, lags), activation='relu'))
mdl.add(LSTM(8, activation='relu'))
mdl.add(Dense(1, activation='relu'))
mdl.compile(loss='mean_squared_error', optimizer='adam')
mdl.fit(X_train, y_train, epochs=100, batch_size=1, verbose=2)
train_predict = mdl.predict(X_train)
test_predict = mdl.predict(X_test)
train_predict = scaler.inverse_transform(train_predict)
y_train = scaler.inverse_transform(y_train)
test_predict = scaler.inverse_transform(test_predict)
y_test = scaler.inverse_transform(y_test)
test_score = math.sqrt(mean_squared_error(y_test[:,0], test_predict[:,0]))
print('Test Score: {:.2f} RMSE'.format(test_score))
Epoch 1/100
298/298 - 1s - loss: 0.0714
Epoch 2/100
298/298 - 0s - loss: 0.0065
Epoch 3/100
298/298 - 0s - loss: 0.0019
Epoch 4/100
298/298 - 0s - loss: 8.9291e-04
Epoch 5/100
298/298 - 0s - loss: 7.8886e-04
Epoch 6/100
298/298 - 0s - loss: 7.5533e-04
Epoch 7/100
298/298 - 0s - loss: 7.5501e-04
Epoch 8/100
298/298 - 0s - loss: 7.2000e-04
Epoch 9/100
298/298 - 0s - loss: 6.9125e-04
Epoch 10/100
298/298 - 0s - loss: 6.5086e-04
Epoch 11/100
298/298 - 0s - loss: 6.1019e-04
Epoch 12/100
298/298 - 0s - loss: 5.6471e-04
Epoch 13/100
298/298 - 0s - loss: 5.3089e-04
Epoch 14/100
298/298 - 0s - loss: 4.6298e-04
Epoch 15/100
298/298 - 0s - loss: 4.2665e-04
Epoch 16/100
298/298 - 0s - loss: 3.2473e-04
Epoch 17/100
298/298 - 0s - loss: 2.3706e-04
Epoch 18/100
298/298 - 0s - loss: 1.8910e-04
Epoch 19/100
298/298 - 0s - loss: 1.6674e-04
Epoch 20/100
298/298 - 0s - loss: 1.3206e-04
Epoch 21/100
298/298 - 0s - loss: 1.0231e-04
Epoch 22/100
298/298 - 0s - loss: 8.3057e-05
Epoch 23/100
298/298 - 0s - loss: 8.2984e-05
Epoch 24/100
298/298 - 0s - loss: 7.7887e-05
Epoch 25/100
298/298 - 0s - loss: 9.0803e-05
Epoch 26/100
298/298 - 0s - loss: 8.7253e-05
Epoch 27/100
298/298 - 0s - loss: 6.8940e-05
Epoch 28/100
298/298 - 0s - loss: 8.3943e-05
Epoch 29/100
298/298 - 0s - loss: 9.5989e-05
Epoch 30/100
298/298 - 0s - loss: 8.3684e-05
Epoch 31/100
298/298 - 0s - loss: 7.6442e-05
Epoch 32/100
298/298 - 0s - loss: 9.5741e-05
Epoch 33/100
298/298 - 0s - loss: 8.8918e-05
Epoch 34/100
298/298 - 0s - loss: 7.3886e-05
Epoch 35/100
298/298 - 0s - loss: 9.1179e-05
Epoch 36/100
298/298 - 0s - loss: 7.2772e-05
Epoch 37/100
298/298 - 0s - loss: 8.9926e-05
Epoch 38/100
298/298 - 0s - loss: 1.0168e-04
Epoch 39/100
298/298 - 0s - loss: 7.1219e-05
Epoch 40/100
298/298 - 0s - loss: 7.7143e-05
Epoch 41/100
298/298 - 0s - loss: 7.8498e-05
Epoch 42/100
298/298 - 0s - loss: 8.0095e-05
Epoch 43/100
298/298 - 0s - loss: 7.6504e-05
Epoch 44/100
298/298 - 0s - loss: 8.5290e-05
Epoch 45/100
298/298 - 0s - loss: 7.3432e-05
Epoch 46/100
298/298 - 0s - loss: 8.9531e-05
Epoch 47/100
298/298 - 0s - loss: 9.5420e-05
Epoch 48/100
298/298 - 0s - loss: 9.5922e-05
Epoch 49/100
298/298 - 0s - loss: 7.0107e-05
Epoch 50/100
298/298 - 0s - loss: 7.4882e-05
Epoch 51/100
298/298 - 0s - loss: 7.7662e-05
Epoch 52/100
298/298 - 0s - loss: 6.1572e-05
Epoch 53/100
298/298 - 0s - loss: 7.5633e-05
Epoch 54/100
298/298 - 0s - loss: 9.8331e-05
Epoch 55/100
298/298 - 0s - loss: 9.9143e-05
Epoch 56/100
298/298 - 0s - loss: 8.1090e-05
Epoch 57/100
298/298 - 0s - loss: 8.5741e-05
Epoch 58/100
298/298 - 0s - loss: 7.1516e-05
Epoch 59/100
298/298 - 0s - loss: 8.1017e-05
Epoch 60/100
298/298 - 0s - loss: 7.8047e-05
Epoch 61/100
298/298 - 0s - loss: 9.1643e-05
Epoch 62/100
298/298 - 0s - loss: 7.9623e-05
Epoch 63/100
298/298 - 0s - loss: 1.0738e-04
Epoch 64/100
298/298 - 0s - loss: 7.2609e-05
Epoch 65/100
298/298 - 0s - loss: 9.0223e-05
Epoch 66/100
298/298 - 0s - loss: 8.2864e-05
Epoch 67/100
298/298 - 0s - loss: 8.9554e-05
Epoch 68/100
298/298 - 0s - loss: 8.3816e-05
Epoch 69/100
298/298 - 0s - loss: 7.0973e-05
Epoch 70/100
298/298 - 0s - loss: 9.3628e-05
Epoch 71/100
298/298 - 0s - loss: 8.2233e-05
Epoch 72/100
298/298 - 0s - loss: 8.4183e-05
Epoch 73/100
298/298 - 0s - loss: 7.7429e-05
Epoch 74/100
298/298 - 0s - loss: 9.6310e-05
Epoch 75/100
298/298 - 0s - loss: 9.4334e-05
Epoch 76/100
298/298 - 0s - loss: 8.0722e-05
Epoch 77/100
298/298 - 0s - loss: 6.8388e-05
Epoch 78/100
298/298 - 0s - loss: 9.0972e-05
Epoch 79/100
298/298 - 0s - loss: 7.6890e-05
Epoch 80/100
298/298 - 0s - loss: 7.2649e-05
Epoch 81/100
298/298 - 0s - loss: 7.2367e-05
Epoch 82/100
298/298 - 0s - loss: 7.4253e-05
Epoch 83/100
298/298 - 0s - loss: 7.9026e-05
Epoch 84/100
298/298 - 0s - loss: 8.3463e-05
Epoch 85/100
298/298 - 0s - loss: 7.2358e-05
Epoch 86/100
298/298 - 0s - loss: 8.7343e-05
Epoch 87/100
298/298 - 0s - loss: 6.9658e-05
Epoch 88/100
298/298 - 0s - loss: 8.0741e-05
Epoch 89/100
298/298 - 0s - loss: 7.1892e-05
Epoch 90/100
298/298 - 0s - loss: 6.7309e-05
Epoch 91/100
298/298 - 0s - loss: 8.1709e-05
Epoch 92/100
298/298 - 0s - loss: 6.9343e-05
Epoch 93/100
298/298 - 0s - loss: 7.3353e-05
Epoch 94/100
298/298 - 0s - loss: 8.7027e-05
Epoch 95/100
298/298 - 0s - loss: 8.0468e-05
Epoch 96/100
298/298 - 0s - loss: 8.2135e-05
Epoch 97/100
298/298 - 0s - loss: 8.2371e-05
Epoch 98/100
298/298 - 0s - loss: 7.0419e-05
Epoch 99/100
298/298 - 0s - loss: 8.3363e-05
Epoch 100/100
298/298 - 0s - loss: 7.7823e-05
Test Score: 0.40 RMSE
predictions = []
for i in range(len(test_predict)):
predictions.append(test_predict[i][0])
plt.figure(figsize=(13, 6))
plt.plot(mois[301:-1], test_predict, 'g-', linewidth=3)
plt.plot(mois[250:-1], indices[250:-1], 'b--', linewidth=2)
plt.title("Prévision IPC par LSTM à t+1")
plt.xlabel('Mois', fontsize=18)
plt.ylabel('Indice', fontsize=18)
plt.grid(True)
plt.show
erreur = np.mean([np.sqrt((a-b)**2) for a in test_predict for b in indices[301:-1]])
print("Racine de l'erreur au carré :", erreur)
Racine de l'erreur au carré : 1.9814067
np.random.seed(1)
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(pd.DataFrame(indices))
train = dataset[0:300,]
test = dataset[300:,]
lags = 12
X_train, y_train = preparation_data(train, lags)
X_test, y_test = preparation_data(test, lags)
X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))
mdl = Sequential()
mdl.add(Dense(12, input_shape=(1, lags), activation='relu'))
mdl.add(LSTM(8, activation='relu'))
mdl.add(Dense(1, activation='relu'))
mdl.compile(loss='mean_squared_error', optimizer='adam')
mdl.fit(X_train, y_train, epochs=100, batch_size=1, verbose=2)
train_predict = mdl.predict(X_train)
test_predict = mdl.predict(X_test)
train_predict = scaler.inverse_transform(train_predict)
y_train = scaler.inverse_transform(y_train)
test_predict = scaler.inverse_transform(test_predict)
y_test = scaler.inverse_transform(y_test)
test_score = math.sqrt(mean_squared_error(y_test[:,0], test_predict[:,0]))
print('Test Score: {:.2f} RMSE'.format(test_score))
Epoch 1/100
287/287 - 1s - loss: 0.0424
Epoch 2/100
287/287 - 0s - loss: 5.9688e-04
Epoch 3/100
287/287 - 0s - loss: 3.5259e-04
Epoch 4/100
287/287 - 0s - loss: 2.7559e-04
Epoch 5/100
287/287 - 0s - loss: 2.4947e-04
Epoch 6/100
287/287 - 0s - loss: 2.3028e-04
Epoch 7/100
287/287 - 0s - loss: 2.1327e-04
Epoch 8/100
287/287 - 0s - loss: 2.0154e-04
Epoch 9/100
287/287 - 0s - loss: 2.3000e-04
Epoch 10/100
287/287 - 0s - loss: 2.2185e-04
Epoch 11/100
287/287 - 0s - loss: 2.3126e-04
Epoch 12/100
287/287 - 0s - loss: 2.8399e-04
Epoch 13/100
287/287 - 0s - loss: 2.0553e-04
Epoch 14/100
287/287 - 0s - loss: 2.2725e-04
Epoch 15/100
287/287 - 0s - loss: 2.5276e-04
Epoch 16/100
287/287 - 0s - loss: 2.4738e-04
Epoch 17/100
287/287 - 0s - loss: 2.6522e-04
Epoch 18/100
287/287 - 0s - loss: 2.6652e-04
Epoch 19/100
287/287 - 0s - loss: 1.8098e-04
Epoch 20/100
287/287 - 0s - loss: 2.2402e-04
Epoch 21/100
287/287 - 0s - loss: 2.7860e-04
Epoch 22/100
287/287 - 0s - loss: 2.2084e-04
Epoch 23/100
287/287 - 0s - loss: 2.4969e-04
Epoch 24/100
287/287 - 0s - loss: 1.8886e-04
Epoch 25/100
287/287 - 0s - loss: 2.2318e-04
Epoch 26/100
287/287 - 0s - loss: 2.1686e-04
Epoch 27/100
287/287 - 0s - loss: 2.2490e-04
Epoch 28/100
287/287 - 0s - loss: 2.0271e-04
Epoch 29/100
287/287 - 0s - loss: 2.2349e-04
Epoch 30/100
287/287 - 0s - loss: 2.1770e-04
Epoch 31/100
287/287 - 0s - loss: 2.3243e-04
Epoch 32/100
287/287 - 0s - loss: 1.9828e-04
Epoch 33/100
287/287 - 0s - loss: 2.4380e-04
Epoch 34/100
287/287 - 0s - loss: 2.4223e-04
Epoch 35/100
287/287 - 0s - loss: 2.0936e-04
Epoch 36/100
287/287 - 0s - loss: 1.8440e-04
Epoch 37/100
287/287 - 0s - loss: 1.9769e-04
Epoch 38/100
287/287 - 0s - loss: 1.8917e-04
Epoch 39/100
287/287 - 0s - loss: 1.9885e-04
Epoch 40/100
287/287 - 0s - loss: 1.9071e-04
Epoch 41/100
287/287 - 0s - loss: 2.4383e-04
Epoch 42/100
287/287 - 0s - loss: 1.9531e-04
Epoch 43/100
287/287 - 0s - loss: 1.8995e-04
Epoch 44/100
287/287 - 0s - loss: 2.4889e-04
Epoch 45/100
287/287 - 0s - loss: 1.8482e-04
Epoch 46/100
287/287 - 0s - loss: 1.9492e-04
Epoch 47/100
287/287 - 0s - loss: 1.8201e-04
Epoch 48/100
287/287 - 0s - loss: 1.8283e-04
Epoch 49/100
287/287 - 0s - loss: 1.7487e-04
Epoch 50/100
287/287 - 0s - loss: 2.0845e-04
Epoch 51/100
287/287 - 0s - loss: 1.9086e-04
Epoch 52/100
287/287 - 0s - loss: 1.9772e-04
Epoch 53/100
287/287 - 0s - loss: 1.8623e-04
Epoch 54/100
287/287 - 0s - loss: 1.6172e-04
Epoch 55/100
287/287 - 0s - loss: 2.1433e-04
Epoch 56/100
287/287 - 0s - loss: 1.7976e-04
Epoch 57/100
287/287 - 0s - loss: 2.1713e-04
Epoch 58/100
287/287 - 0s - loss: 1.6886e-04
Epoch 59/100
287/287 - 0s - loss: 2.1218e-04
Epoch 60/100
287/287 - 0s - loss: 1.8648e-04
Epoch 61/100
287/287 - 0s - loss: 2.0634e-04
Epoch 62/100
287/287 - 0s - loss: 1.6842e-04
Epoch 63/100
287/287 - 0s - loss: 1.9656e-04
Epoch 64/100
287/287 - 0s - loss: 1.9495e-04
Epoch 65/100
287/287 - 0s - loss: 1.5619e-04
Epoch 66/100
287/287 - 0s - loss: 2.3102e-04
Epoch 67/100
287/287 - 0s - loss: 1.9689e-04
Epoch 68/100
287/287 - 0s - loss: 1.7576e-04
Epoch 69/100
287/287 - 0s - loss: 1.8296e-04
Epoch 70/100
287/287 - 0s - loss: 1.6027e-04
Epoch 71/100
287/287 - 0s - loss: 1.4849e-04
Epoch 72/100
287/287 - 0s - loss: 1.4424e-04
Epoch 73/100
287/287 - 0s - loss: 2.0999e-04
Epoch 74/100
287/287 - 0s - loss: 1.5531e-04
Epoch 75/100
287/287 - 0s - loss: 2.0825e-04
Epoch 76/100
287/287 - 0s - loss: 1.7728e-04
Epoch 77/100
287/287 - 0s - loss: 1.5636e-04
Epoch 78/100
287/287 - 0s - loss: 1.6994e-04
Epoch 79/100
287/287 - 0s - loss: 1.7194e-04
Epoch 80/100
287/287 - 0s - loss: 1.8306e-04
Epoch 81/100
287/287 - 0s - loss: 1.6646e-04
Epoch 82/100
287/287 - 0s - loss: 1.5805e-04
Epoch 83/100
287/287 - 0s - loss: 1.6823e-04
Epoch 84/100
287/287 - 0s - loss: 1.5206e-04
Epoch 85/100
287/287 - 0s - loss: 1.5807e-04
Epoch 86/100
287/287 - 0s - loss: 1.9300e-04
Epoch 87/100
287/287 - 0s - loss: 1.5103e-04
Epoch 88/100
287/287 - 0s - loss: 1.7094e-04
Epoch 89/100
287/287 - 0s - loss: 2.0555e-04
Epoch 90/100
287/287 - 0s - loss: 1.4272e-04
Epoch 91/100
287/287 - 0s - loss: 1.5321e-04
Epoch 92/100
287/287 - 0s - loss: 1.6121e-04
Epoch 93/100
287/287 - 0s - loss: 1.7255e-04
Epoch 94/100
287/287 - 0s - loss: 1.3315e-04
Epoch 95/100
287/287 - 0s - loss: 1.3782e-04
Epoch 96/100
287/287 - 0s - loss: 1.7676e-04
Epoch 97/100
287/287 - 0s - loss: 1.2525e-04
Epoch 98/100
287/287 - 0s - loss: 1.5605e-04
Epoch 99/100
287/287 - 0s - loss: 1.6968e-04
Epoch 100/100
287/287 - 0s - loss: 1.3761e-04
Test Score: 0.92 RMSE
predictions = []
for i in range(len(test_predict)):
predictions.append(test_predict[i][0])
plt.figure(figsize=(13, 6))
plt.plot(mois[312:-1], test_predict, 'g-', linewidth=3)
plt.plot(mois[250:-1], indices[250:-1], 'b--', linewidth=2)
plt.title("Prévision IPC par LSTM à t+12")
plt.xlabel('Mois', fontsize=18)
plt.ylabel('Indice', fontsize=18)
plt.grid(True)
plt.show
erreur = np.mean([np.sqrt((a-b)**2) for a in test_predict for b in indices[312:-1]])
print("Racine de l'erreur au carré : ", erreur)
Racine de l'erreur au carré : 1.6568779