Estimation des paramètres d’un modèle SIRD pour la France

On récupère les données réelles pour un pays et on cherche à estimer un modèle CovidSIRD. Il y a deux problèmes avec les données. Le premier est que le nombre de cas positifs est largement sous-estimé. La principale raison durant le premier confinement fut le manque de tests, limité à 5000 pendant cette période. La seconde raison est que les personnes asymptomatiques ne le savent pas et ne se font pas toujours tester. Le délai d’attente des résultats des tests, les longues queues devant les laboratoires ont peut-être aussi joué puisqu’aux mois d’août, septembre.

Récupération des données

from datetime import timedelta
import warnings
import numpy
import pandas
from pandas import to_datetime
import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
from aftercovid.data import extract_hopkins_data, preprocess_hopkins_data
from aftercovid.models import CovidSIRD, rolling_estimation


data = extract_hopkins_data()
diff, df = preprocess_hopkins_data(data)
df.tail()
deaths confirmed recovered infected safe
3/5/23 161435.968571 3.859429e+07 3.835907e+07 73569.0 2.840592e+07
3/6/23 161452.705049 3.860151e+07 3.836405e+07 76051.0 2.839844e+07
3/7/23 161475.657933 3.860777e+07 3.836844e+07 78139.0 2.839195e+07
3/8/23 161501.479928 3.861292e+07 3.837193e+07 79983.0 2.838659e+07
3/9/23 161512.000000 3.861851e+07 3.837547e+07 82286.0 2.838074e+07


Séries différenciées.

deaths confirmed recovered infected safe
3/5/23 18.580906 3597.191361 2720.185793 0.0 0.0
3/6/23 16.736478 7220.721856 4980.741327 2482.0 -8146.0
3/7/23 22.952884 6260.736370 4387.057519 2088.0 -7063.0
3/8/23 25.821995 5148.287815 3488.556948 1844.0 -5808.0
3/9/23 10.520072 5591.494411 3539.064377 2303.0 -6308.0


Graphes.

fig = plt.figure(tight_layout=True, figsize=(12, 10))
gs = gridspec.GridSpec(2, 2)
axs = []
ax = fig.add_subplot(gs[0, :])
df.plot(logy=True, title="Données COVID", ax=ax)
axs.append(ax)
ax = fig.add_subplot(gs[1, 0])
df[['recovered', 'confirmed', 'infected']].diff().plot(
    title="Différences", ax=ax)
axs.append(ax)
ax = fig.add_subplot(gs[1, 1])
df[['deaths']].diff().plot(title="Différences", ax=ax)
axs.append(ax)
for a in axs:
    for tick in a.get_xticklabels():
        tick.set_rotation(30)
Données COVID, Différences, Différences

On voit qu’en France, les données sont difficilement exploitables en l’état. Et on sait qu’en France la pénurie de tests implique une sous-estimation du nombre de cas positifs. L’estimation du modèle est très compromise.

Estimation d’un modèle

Sur 21 jours.

model = CovidSIRD()
print(model.quantity_names)

cols = ['safe', 'infected', 'recovered', 'deaths']
data = df[cols].values.astype(numpy.float32)
print(data[:5])

X = data[:-1]
y = data[1:] - data[:-1]
dates = df.index[:-1]
['S', 'I', 'R', 'D']
[[6.7e+07 0.0e+00 0.0e+00 0.0e+00]
 [6.7e+07 1.0e+00 0.0e+00 0.0e+00]
 [6.7e+07 1.0e+00 0.0e+00 0.0e+00]
 [6.7e+07 2.0e+00 0.0e+00 0.0e+00]
 [6.7e+07 2.0e+00 0.0e+00 0.0e+00]]

Estimation sur 3 semaines car les séries sont cycliques.

dfcoef, model = rolling_estimation(
    X, y, delay=21, dates=dates, verbose=1)
dfcoef.head(n=10)
k=7 iter=4 loss=2.892 l1=2.3e-08 coef=[0.05834068 0.03286181 0.00037678] R0=1.755209119508307 lr=100.0 cn=0.0
k=14 iter=4 loss=3.506 l1=3.05e-08 coef=[0.09443729 0.04848759 0.01241959] R0=1.5505114659417232 lr=100.0 cn=0.0
k=21 iter=4 loss=2.105 l1=2.01e-08 coef=[0.0504196  0.0300814  0.02355595] R0=0.9400092467058822 lr=100.0 cn=0.0
k=28 iter=4 loss=15.439 l1=6.51e-08 coef=[0.18045675 0.01400365 0.16931068] R0=0.9844115744257791 lr=1000000.0 cn=0.0
k=35 iter=4 loss=6227.478 l1=9.65e-07 coef=[0.44042737 0.02223431 0.18649388] R0=2.110052144866064 lr=1 cn=0.0
k=42 iter=9 loss=63081.857 l1=2.97e-06 coef=[0.37104932 0.00623364 0.20734608] R0=1.737287176411547 lr=1 cn=0.0
k=49 iter=4 loss=1424380.952 l1=1.52e-05 coef=[0.35292966 0.00256516 0.09232724] R0=3.7192614652678113 lr=1e-06 cn=0.0
k=56 iter=44 loss=3207282.667 l1=2.9e-05 coef=[0.12468885 0.00575013 0.08120407] R0=1.433960110638263 lr=0.0001 cn=0.0
k=63 iter=58 loss=240231448.381 l1=0.000139 coef=[0.13147168 0.0052198  0.01940267] R0=5.339498762954364 lr=1e-06 cn=0.0
k=70 iter=500 loss=260881408.000 l1=0.000156 coef=[0.0491215  0.01132593 0.00999514] R0=2.3038935622726666 lr=0.0001 cn=0.0
k=77 iter=126 loss=263919347.810 l1=0.000153 coef=[0.03448162 0.00777669 0.00642308] R0=2.428321497992309 lr=1e-06 cn=0.0
k=84 iter=500 loss=254585880.381 l1=0.000217 coef=[0.00871836 0.03243955 0.00469673] R0=0.23476676556029183 lr=1e-06 cn=0.0
k=91 iter=500 loss=244815189.333 l1=0.000223 coef=[0.00590911 0.05085177 0.00687832] R0=0.10235761805820637 lr=1e-06 cn=0.0
k=98 iter=300 loss=207871609.905 l1=0.000188 coef=[0.00022269 0.12733239 0.01765767] R0=0.0015359119495375992 lr=1e-06 cn=0.0
k=105 iter=135 loss=6766136.381 l1=4.22e-05 coef=[1.00141250e-04 1.86578699e-01 3.98981047e-02] R0=0.0004421700059703498 lr=0.0001 cn=0.0
k=112 iter=4 loss=1611268.190 l1=2.25e-05 coef=[0.00976553 0.08962611 0.03122775] R0=0.0808044712956697 lr=0.0001 cn=0.0
k=119 iter=4 loss=2129437.524 l1=2.01e-05 coef=[0.0655694  0.01450738 0.0092242 ] R0=2.7629598978288614 lr=0.0001 cn=0.0
k=126 iter=500 loss=1713926.095 l1=1.59e-05 coef=[0.05087384 0.01431104 0.00604876] R0=2.4987396099497357 lr=1 cn=0.0
k=133 iter=4 loss=1629501.333 l1=1.58e-05 coef=[0.04018701 0.03053034 0.0057633 ] R0=1.107274025861498 lr=0.0001 cn=0.0
k=140 iter=8 loss=1410882.095 l1=1.84e-05 coef=[0.00290432 0.05019132 0.00593151] R0=0.05174933003708282 lr=0.0001 cn=0.0
k=147 iter=149 loss=1215611.619 l1=1.59e-05 coef=[0.00010012 0.09495068 0.01607692] R0=0.000901799410979714 lr=0.01 cn=0.0
k=154 iter=500 loss=799895.619 l1=1.37e-05 coef=[1.00000000e-04 1.32744542e-01 5.04297960e-02] R0=0.0005459280007705836 lr=1 cn=0.0
k=161 iter=260 loss=122189.845 l1=5.76e-06 coef=[0.06184477 0.03094063 0.00530937] R0=1.706062248853707 lr=1 cn=0.0
k=168 iter=27 loss=240686.214 l1=7.39e-06 coef=[0.07568472 0.02502676 0.00456714] R0=2.5574430575900498 lr=0.01 cn=0.0
k=175 iter=500 loss=517669.667 l1=1.05e-05 coef=[0.08089621 0.02357483 0.00115477] R0=3.271229845765822 lr=1 cn=0.0
k=182 iter=500 loss=1012880.000 l1=1.64e-05 coef=[0.10317076 0.0245609  0.00072604] R0=4.080001312058182 lr=0.01 cn=0.0
k=189 iter=4 loss=1843597.524 l1=2.26e-05 coef=[0.0858811  0.01662056 0.00010399] R0=5.1350334504330535 lr=1e-06 cn=0.0
k=196 iter=4 loss=4248559.238 l1=3.56e-05 coef=[0.07676486 0.01467629 0.0014088 ] R0=4.772424133025515 lr=1e-06 cn=0.0
k=203 iter=500 loss=12318608.762 l1=5.17e-05 coef=[0.09071543 0.0164597  0.00057547] R0=5.325184294016005 lr=0.0001 cn=0.0
k=210 iter=13 loss=12691438.476 l1=5.78e-05 coef=[0.08337968 0.02003612 0.00059904] R0=4.040660517950085 lr=1e-06 cn=0.0
k=217 iter=59 loss=13347364.571 l1=6.18e-05 coef=[0.07788734 0.02347313 0.000424  ] R0=3.2592757603162403 lr=1e-06 cn=0.0
k=224 iter=500 loss=11563561.143 l1=6.2e-05 coef=[0.06887223 0.02687201 0.00062228] R0=2.504964321429425 lr=1e-06 cn=0.0
k=231 iter=124 loss=18621287.619 l1=8.44e-05 coef=[0.06275526 0.0302782  0.00105409] R0=2.0028941026823044 lr=1e-06 cn=0.0
k=238 iter=35 loss=23342966.857 l1=9.68e-05 coef=[0.05660499 0.03147142 0.00056473] R0=1.766909659824766 lr=1e-06 cn=0.0
k=245 iter=346 loss=32372260.571 l1=0.000113 coef=[0.06069978 0.03451995 0.00040144] R0=1.7381830609502555 lr=1e-06 cn=0.0
k=252 iter=79 loss=52225048.381 l1=0.000146 coef=[0.06900206 0.03352051 0.00038751] R0=2.0349778685308273 lr=1e-06 cn=0.0
k=259 iter=500 loss=350694131.810 l1=0.000294 coef=[0.08026508 0.0287869  0.00044941] R0=2.7453904880280637 lr=1e-06 cn=0.0
k=266 iter=500 loss=1140714057.143 l1=0.000487 coef=[0.07535252 0.02508071 0.00061586] R0=2.932396094600753 lr=1e-06 cn=0.0
k=273 iter=500 loss=1568713191.619 l1=0.000684 coef=[0.06275687 0.02583885 0.0008263 ] R0=2.3535160112253957 lr=1e-06 cn=0.0
k=280 iter=500 loss=1997805080.381 l1=0.000806 coef=[0.04823934 0.0323002  0.00049912] R0=1.4707415353904065 lr=1e-06 cn=0.0
k=287 iter=500 loss=2218992201.143 l1=0.000871 coef=[0.03377189 0.04114964 0.00084641] R0=0.804168283318726 lr=1e-06 cn=0.0
k=294 iter=500 loss=1790802407.619 l1=0.000792 coef=[0.01867099 0.05413866 0.00112319] R0=0.33786394769270117 lr=1e-06 cn=0.0
k=301 iter=500 loss=1156334153.143 l1=0.000577 coef=[0.0112809  0.06615655 0.00133459] R0=0.16714632274352584 lr=1e-06 cn=0.0
k=308 iter=500 loss=354817145.905 l1=0.000329 coef=[0.01662276 0.07865563 0.00095963] R0=0.2087886817708945 lr=1e-06 cn=0.0
k=315 iter=500 loss=137559478.857 l1=0.000237 coef=[0.04361668 0.06808631 0.00160969] R0=0.6258133031370586 lr=1e-06 cn=0.0
k=322 iter=243 loss=65073548.190 l1=0.00016 coef=[0.05308818 0.04766222 0.0016397 ] R0=1.0767973171177028 lr=1e-06 cn=0.0
k=329 iter=75 loss=73245427.810 l1=0.000163 coef=[0.05471799 0.04233682 0.00127931] R0=1.2545357729252822 lr=1e-06 cn=0.0
k=336 iter=500 loss=79037878.857 l1=0.000174 coef=[0.05635802 0.04359032 0.00134345] R0=1.2542464537579692 lr=1e-06 cn=0.0
k=343 iter=426 loss=74050310.095 l1=0.000173 coef=[0.05881295 0.04100472 0.00135947] R0=1.3882705180168433 lr=1e-06 cn=0.0
k=350 iter=500 loss=75224472.381 l1=0.000177 coef=[0.06015364 0.04059088 0.00118638] R0=1.4398654693048634 lr=1e-06 cn=0.0
k=357 iter=500 loss=71831582.476 l1=0.000164 coef=[0.05726441 0.0409808  0.00123676] R0=1.3564122625596786 lr=0.0001 cn=0.0
k=364 iter=500 loss=138922410.667 l1=0.000178 coef=[0.05429315 0.04366047 0.0011152 ] R0=1.2125589404751567 lr=1e-06 cn=0.0
k=371 iter=500 loss=110195212.190 l1=0.000155 coef=[0.04932464 0.04593585 0.00126493] R0=1.0449963103593294 lr=1e-06 cn=0.0
k=378 iter=500 loss=113728926.476 l1=0.000154 coef=[0.04944155 0.04794813 0.0010466 ] R0=1.0091198801544297 lr=1e-06 cn=0.0
k=385 iter=500 loss=109587724.190 l1=0.000155 coef=[0.05131673 0.04747931 0.00087421] R0=1.06128222472685 lr=1e-06 cn=0.0
k=392 iter=500 loss=110209804.190 l1=0.000154 coef=[0.05308295 0.04488792 0.00088559] R0=1.1596869311287605 lr=1e-06 cn=0.0
k=399 iter=500 loss=113190119.619 l1=0.000155 coef=[0.05630332 0.04368516 0.00082047] R0=1.2650832755011514 lr=1e-06 cn=0.0
k=406 iter=500 loss=149163617.524 l1=0.000184 coef=[0.0632441  0.04181592 0.00052347] R0=1.4937415469221507 lr=1e-06 cn=0.0
k=413 iter=500 loss=199053324.190 l1=0.00024 coef=[0.06573927 0.03845652 0.00057412] R0=1.6842986399786621 lr=1e-06 cn=0.0
k=420 iter=500 loss=866763532.190 l1=0.000502 coef=[0.05530947 0.0355418  0.00022387] R0=1.5464403776325955 lr=1e-06 cn=0.0
k=427 iter=500 loss=2083107401.143 l1=0.000812 coef=[0.05961435 0.0392738  0.00103665] R0=1.478880865062992 lr=1e-06 cn=0.0
k=434 iter=500 loss=2082199064.381 l1=0.000785 coef=[0.04790076 0.04438703 0.00053702] R0=1.066260949513113 lr=1e-06 cn=0.0
k=441 iter=500 loss=2050517674.667 l1=0.000773 coef=[0.05162675 0.04674674 0.00019365] R0=1.099836430924843 lr=1e-06 cn=0.0
k=448 iter=500 loss=2186341229.714 l1=0.00075 coef=[0.03382994 0.0493756  0.00035621] R0=0.680247527087222 lr=1e-06 cn=0.0
k=455 iter=500 loss=2134932528.762 l1=0.000731 coef=[0.03064602 0.05191658 0.00053016] R0=0.5843265647779559 lr=1e-06 cn=0.0
k=462 iter=500 loss=1414688768.000 l1=0.000526 coef=[0.02180947 0.05888741 0.00031672] R0=0.36837743668919537 lr=1e-06 cn=0.0
k=469 iter=500 loss=97736185.905 l1=0.000185 coef=[0.03362059 0.06764437 0.00050218] R0=0.4933571421400535 lr=1e-06 cn=0.0
k=476 iter=96 loss=90934320.762 l1=0.000176 coef=[0.03492849 0.06956951 0.00053361] R0=0.49824449225085077 lr=1e-06 cn=0.0
k=483 iter=500 loss=80342826.667 l1=0.000171 coef=[0.03675542 0.06925312 0.00091007] R0=0.5238561739876689 lr=1e-06 cn=0.0
k=490 iter=500 loss=48508422.095 l1=0.00014 coef=[0.04091688 0.06729308 0.0003589 ] R0=0.6048142787818094 lr=1e-06 cn=0.0
k=497 iter=500 loss=40573644.190 l1=0.00014 coef=[0.04015249 0.07236043 0.00093792] R0=0.5477952451716601 lr=1e-06 cn=0.0
k=504 iter=17 loss=35139373.714 l1=0.00011 coef=[0.0305812  0.07675205 0.00107176] R0=0.39295433052283135 lr=1e-06 cn=0.0
k=511 iter=13 loss=18743993.905 l1=7.34e-05 coef=[0.02291313 0.08971905 0.00072034] R0=0.2533534568294282 lr=1e-06 cn=0.0
k=518 iter=225 loss=22338706.286 l1=8.23e-05 coef=[0.03664089 0.06753022 0.00055215] R0=0.5381847474110372 lr=0.0001 cn=0.0
k=525 iter=269 loss=35019321.905 l1=0.000118 coef=[0.1342212  0.02958293 0.00073735] R0=4.426779121850381 lr=1e-06 cn=0.0
k=532 iter=358 loss=71093388.190 l1=0.000147 coef=[0.12334415 0.01496488 0.000669  ] R0=7.88954165938781 lr=1e-06 cn=0.0
k=539 iter=500 loss=151175472.762 l1=0.000222 coef=[0.0920324  0.01455298 0.00034662] R0=6.176839583844336 lr=1e-06 cn=0.0
k=546 iter=500 loss=196097182.476 l1=0.000281 coef=[0.07115875 0.02410138 0.00031533] R0=2.9143461530553654 lr=1e-06 cn=0.0
k=553 iter=500 loss=178143085.714 l1=0.000274 coef=[0.05959771 0.03400519 0.00039571] R0=1.7324461952445875 lr=1e-06 cn=0.0
k=560 iter=84 loss=83637638.095 l1=0.000179 coef=[0.05338787 0.04173933 0.000229  ] R0=1.2720987951628469 lr=1e-06 cn=0.0
k=567 iter=500 loss=149603693.714 l1=0.000219 coef=[0.04670133 0.04762857 0.00012817] R0=0.9779003220579136 lr=1e-06 cn=0.0
k=574 iter=500 loss=170356004.571 l1=0.000244 coef=[0.0402969  0.05187034 0.00018671] R0=0.7740910524519888 lr=1e-06 cn=0.0
k=581 iter=500 loss=168911689.143 l1=0.000248 coef=[0.0343077  0.0581567  0.00018208] R0=0.5880770466858445 lr=1e-06 cn=0.0
k=588 iter=500 loss=179628117.333 l1=0.000232 coef=[0.03079169 0.06350803 0.00033653] R0=0.482291605298889 lr=0.0001 cn=0.0
k=595 iter=500 loss=152179419.429 l1=0.000206 coef=[0.03436805 0.06830286 0.00066485] R0=0.49832085070865434 lr=0.0001 cn=0.0
k=602 iter=169 loss=141035763.810 l1=0.000186 coef=[0.0351242  0.06737802 0.0011257 ] R0=0.5127343220236429 lr=1e-06 cn=0.0
k=609 iter=500 loss=28904249.905 l1=9.37e-05 coef=[0.03610944 0.06747092 0.00042671] R0=0.5318216923837041 lr=0.0001 cn=0.0
k=616 iter=48 loss=24596772.571 l1=8.63e-05 coef=[0.03937328 0.06133477 0.00064988] R0=0.6352101512053165 lr=1e-06 cn=0.0
k=623 iter=500 loss=13414863.238 l1=6.5e-05 coef=[0.05149318 0.05214043 0.00065956] R0=0.9752498583540041 lr=0.0001 cn=0.0
k=630 iter=36 loss=12140128.000 l1=5.26e-05 coef=[0.06529055 0.0448927  0.00055447] R0=1.4366250921538168 lr=1e-06 cn=0.0
k=637 iter=191 loss=14314712.381 l1=6.33e-05 coef=[0.07152687 0.0390548  0.00073243] R0=1.797734214801954 lr=1e-06 cn=0.0
k=644 iter=56 loss=34475611.429 l1=0.000106 coef=[0.0807012  0.03547774 0.00010021] R0=2.2682926229123703 lr=1e-06 cn=0.0
k=651 iter=500 loss=63936170.667 l1=0.000138 coef=[0.09782602 0.02984126 0.00041661] R0=3.2330769366256744 lr=1e-06 cn=0.0
k=658 iter=500 loss=113782052.571 l1=0.00018 coef=[0.1043881  0.02508878 0.00025581] R0=4.118753223304698 lr=1e-06 cn=0.0
k=665 iter=500 loss=221815588.571 l1=0.000251 coef=[0.09477874 0.02313621 0.00013445] R0=4.072884414175297 lr=1e-06 cn=0.0
k=672 iter=500 loss=366748184.381 l1=0.000362 coef=[0.08068561 0.02493657 0.00046313] R0=3.1766366708483345 lr=1e-06 cn=0.0
k=679 iter=500 loss=416156672.000 l1=0.000413 coef=[0.07163851 0.03004245 0.00019947] R0=2.368847688029582 lr=1e-06 cn=0.0
k=686 iter=500 loss=2326747038.476 l1=0.000746 coef=[0.08555775 0.0340741  0.00078865] R0=2.4541309095965165 lr=1e-06 cn=0.0
k=693 iter=500 loss=7750753133.714 l1=0.00177 coef=[0.10886333 0.03025705 0.0005852 ] R0=3.52968201069692 lr=1e-06 cn=0.0
k=700 iter=500 loss=10568343942.095 l1=0.00201 coef=[0.10995673 0.02205232 0.0009099 ] R0=4.788593413100028 lr=1e-06 cn=0.0
k=707 iter=500 loss=14875256734.476 l1=0.00232 coef=[0.09662391 0.02232599 0.00015065] R0=4.29886098277346 lr=1e-06 cn=0.0
k=714 iter=500 loss=18728441173.333 l1=0.00281 coef=[0.08590984 0.02941483 0.00049356] R0=2.8724327751550116 lr=1e-06 cn=0.0
k=721 iter=500 loss=22123660044.190 l1=0.00324 coef=[0.07277344 0.03499693 0.00014779] R0=2.070679781635249 lr=1e-06 cn=0.0
k=728 iter=500 loss=36824796988.952 l1=0.00357 coef=[0.0588199  0.04134964 0.00027312] R0=1.4131667105145167 lr=1e-06 cn=0.0
k=735 iter=500 loss=41080464530.286 l1=0.00407 coef=[0.04502439 0.04962083 0.00039861] R0=0.9001378566096665 lr=1e-06 cn=0.0
k=742 iter=500 loss=36061037324.190 l1=0.00404 coef=[0.03409169 0.05827622 0.00020681] R0=0.5829329547461326 lr=1e-06 cn=0.0
k=749 iter=500 loss=21240969703.619 l1=0.00294 coef=[0.03302898 0.07336878 0.00047122] R0=0.4473046246955265 lr=1e-06 cn=0.0
k=756 iter=500 loss=13034018133.333 l1=0.00205 coef=[0.02678544 0.08308261 0.00010905] R0=0.32197261866433813 lr=1e-06 cn=0.0
k=763 iter=500 loss=12450852278.857 l1=0.00215 coef=[0.04506453 0.07727831 0.0012421 ] R0=0.5739211903776157 lr=0.0001 cn=0.0
k=770 iter=500 loss=12113566573.714 l1=0.00181 coef=[0.06596964 0.05224757 0.00065939] R0=1.2468989793642014 lr=1e-06 cn=0.0
k=777 iter=500 loss=2840331995.429 l1=0.00109 coef=[0.11017447 0.03714684 0.00096306] R0=2.8909670733101125 lr=1e-06 cn=0.0
k=784 iter=500 loss=2953940406.857 l1=0.00105 coef=[0.1009059  0.03079557 0.0003158 ] R0=3.243376583765561 lr=1e-06 cn=0.0
k=791 iter=500 loss=3631220248.381 l1=0.00123 coef=[0.08903559 0.0333961  0.00017494] R0=2.6521543998261197 lr=1e-06 cn=0.0
k=798 iter=500 loss=5947086945.524 l1=0.00145 coef=[0.07380673 0.03940845 0.00013688] R0=1.8663830688048044 lr=1e-06 cn=0.0
k=805 iter=500 loss=5476138617.905 l1=0.00143 coef=[0.06231148 0.04667169 0.00017325] R0=1.330164670688942 lr=1e-06 cn=0.0
k=812 iter=500 loss=4726569447.619 l1=0.00146 coef=[0.05097147 0.05562572 0.00025291] R0=0.9121817357199845 lr=1e-06 cn=0.0
k=819 iter=500 loss=3203741013.333 l1=0.00117 coef=[0.04682252 0.06406108 0.00048678] R0=0.7253922243831707 lr=1e-06 cn=0.0
k=826 iter=500 loss=2371304301.714 l1=0.000889 coef=[0.04304362 0.07247433 0.00055421] R0=0.5894082269630397 lr=1e-06 cn=0.0
k=833 iter=500 loss=1674484979.810 l1=0.000695 coef=[0.04714347 0.07213881 0.00038968] R0=0.6499992183824655 lr=1e-06 cn=0.0
k=840 iter=500 loss=475288234.667 l1=0.000407 coef=[0.05349138 0.06929821 0.00029771] R0=0.7685993483594111 lr=1e-06 cn=0.0
k=847 iter=500 loss=200116358.095 l1=0.00029 coef=[0.0533286  0.06174411 0.00028236] R0=0.8597717108332261 lr=1e-06 cn=0.0
k=854 iter=500 loss=2407840816.762 l1=0.000601 coef=[0.08069804 0.05848054 0.00065141] R0=1.3647113981282784 lr=1e-06 cn=0.0
k=861 iter=500 loss=3486565132.190 l1=0.00102 coef=[0.12808295 0.04302537 0.00028583] R0=2.957271061478513 lr=1e-06 cn=0.0
k=868 iter=500 loss=5737431820.190 l1=0.00128 coef=[0.15692556 0.02595416 0.00026657] R0=5.984789997065248 lr=1e-06 cn=0.0
k=875 iter=500 loss=8147985554.286 l1=0.00156 coef=[1.41508785e-01 2.10581417e-02 1.19144796e-04] R0=6.6821018683877975 lr=1e-06 cn=0.0
k=882 iter=500 loss=9998786169.905 l1=0.00181 coef=[1.29276209e-01 2.50677282e-02 1.10398649e-04] R0=5.1344648974465725 lr=1e-06 cn=0.0
k=889 iter=500 loss=16171522925.714 l1=0.00242 coef=[0.10621184 0.03343329 0.00015125] R0=3.1625220050529834 lr=1e-06 cn=0.0
k=896 iter=500 loss=14517305344.000 l1=0.00226 coef=[0.08782278 0.04573514 0.00036113] R0=1.9052035560097407 lr=1e-06 cn=0.0
k=903 iter=500 loss=13228268397.714 l1=0.0021 coef=[0.06475449 0.05606922 0.0003886 ] R0=1.146953515763045 lr=1e-06 cn=0.0
k=910 iter=500 loss=12583670345.143 l1=0.00203 coef=[0.05562708 0.06662898 0.00070494] R0=0.8261375236819947 lr=1e-06 cn=0.0
k=917 iter=500 loss=11788551704.381 l1=0.00185 coef=[0.03641303 0.06812824 0.00137835] R0=0.523878777799028 lr=1e-06 cn=0.0
k=924 iter=500 loss=9119587961.905 l1=0.00139 coef=[0.04449231 0.06939509 0.00125141] R0=0.6297879357111924 lr=1e-06 cn=0.0
k=931 iter=500 loss=1496876568.381 l1=0.000621 coef=[0.05243953 0.07676786 0.00074433] R0=0.676532750765285 lr=1e-06 cn=0.0
k=938 iter=500 loss=388392106.667 l1=0.000371 coef=[0.07582843 0.0636479  0.00030291] R0=1.185730584644995 lr=1e-06 cn=0.0
k=945 iter=179 loss=276829842.286 l1=0.000294 coef=[0.09285037 0.05460489 0.00052812] R0=1.684115752055156 lr=1e-06 cn=0.0
k=952 iter=500 loss=348549120.000 l1=0.000365 coef=[0.11858174 0.0438518  0.00026504] R0=2.6879018564958232 lr=1e-06 cn=0.0
k=959 iter=500 loss=409999311.238 l1=0.000402 coef=[0.14764961 0.03733221 0.00015394] R0=3.9387783229470026 lr=1e-06 cn=0.0
k=966 iter=500 loss=665283388.952 l1=0.000477 coef=[0.1536459  0.03356071 0.00047719] R0=4.51396587995661 lr=1e-06 cn=0.0
k=973 iter=500 loss=973690002.286 l1=0.000617 coef=[0.14648815 0.03504458 0.00095901] R0=4.068709647630219 lr=1e-06 cn=0.0
k=980 iter=500 loss=1100121526.857 l1=0.000703 coef=[0.13111803 0.03887313 0.0004576 ] R0=3.3337302981420986 lr=1e-06 cn=0.0
k=987 iter=500 loss=1138222713.905 l1=0.000735 coef=[0.11291427 0.04392894 0.00059463] R0=2.5360556942223846 lr=1e-06 cn=0.0
k=994 iter=500 loss=1632050419.810 l1=0.000808 coef=[0.09287183 0.05195116 0.00054471] R0=1.7691263878595367 lr=1e-06 cn=0.0
k=1001 iter=500 loss=1379778950.095 l1=0.000742 coef=[0.08275302 0.06203377 0.0001    ] R0=1.3318525602816045 lr=0.0001 cn=0.0
k=1008 iter=500 loss=1091869842.286 l1=0.000657 coef=[0.07931679 0.07243956 0.00031849] R0=1.0901445975889974 lr=1e-06 cn=0.0
k=1015 iter=500 loss=1198010075.429 l1=0.000645 coef=[0.11569071 0.07001141 0.00029904] R0=1.6454269189652009 lr=1e-06 cn=0.0
k=1022 iter=500 loss=1187201901.714 l1=0.000654 coef=[0.14631971 0.051752   0.00019065] R0=2.8169474747367467 lr=1e-06 cn=0.0
k=1029 iter=500 loss=1018483663.238 l1=0.000625 coef=[0.15786834 0.03604784 0.00022043] R0=4.352794402308102 lr=1e-06 cn=0.0
k=1036 iter=500 loss=1155665139.810 l1=0.0007 coef=[0.1470572  0.03546954 0.00034795] R0=4.105736788402354 lr=1e-06 cn=0.0
k=1043 iter=500 loss=1402617075.810 l1=0.000823 coef=[0.1285943  0.03979544 0.00069533] R0=3.175892293755267 lr=1e-06 cn=0.0
k=1050 iter=500 loss=1536133607.619 l1=0.000775 coef=[1.05905365e-01 4.90103938e-02 1.00144326e-04] R0=2.1564692489684494 lr=1e-06 cn=0.0
k=1057 iter=500 loss=1682753633.524 l1=0.000864 coef=[0.08595552 0.05505496 0.0009776 ] R0=1.5340282473487012 lr=1e-06 cn=0.0
k=1064 iter=500 loss=1840969435.429 l1=0.000914 coef=[0.06243588 0.06619055 0.00058062] R0=0.9350724361792955 lr=1e-06 cn=0.0
k=1071 iter=500 loss=1509095424.000 l1=0.000788 coef=[0.04607503 0.07556568 0.00030829] R0=0.6072573850303958 lr=1e-06 cn=0.0
k=1078 iter=500 loss=872263094.857 l1=0.000541 coef=[0.04112058 0.0898352  0.00105128] R0=0.4524388802204526 lr=1e-06 cn=0.0
k=1085 iter=500 loss=320728234.667 l1=0.000309 coef=[0.04510237 0.09831537 0.00033274] R0=0.4572045693744821 lr=1e-06 cn=0.0
k=1092 iter=500 loss=96737395.810 l1=0.000179 coef=[0.0664977  0.0866163  0.00120987] R0=0.7571513806788691 lr=1e-06 cn=0.0
k=1094 iter=500 loss=85445760.000 l1=0.000149 coef=[0.07887831 0.07706786 0.0019948 ] R0=0.9976682872201622 lr=1e-06 cn=0.0
k=1096 iter=500 loss=67393999.238 l1=0.000136 coef=[0.05076743 0.07016192 0.00088989] R0=0.7145129044475623 lr=1e-06 cn=0.0
k=1098 iter=500 loss=12899917.714 l1=6.91e-05 coef=[0.08666759 0.06382434 0.00039731] R0=1.3495072313739942 lr=0.0001 cn=0.0
k=1100 iter=20 loss=9238016.762 l1=5.45e-05 coef=[0.08985122 0.05870788 0.00053192] R0=1.5167372736193752 lr=1e-06 cn=0.0
k=1102 iter=14 loss=8648972.190 l1=5.27e-05 coef=[0.08540153 0.05772006 0.00028642] R0=1.4722755446957858 lr=1e-06 cn=0.0
k=1104 iter=500 loss=3897817.143 l1=3.99e-05 coef=[0.09715117 0.05730049 0.00059883] R0=1.6779327120052132 lr=0.0001 cn=0.0
k=1106 iter=41 loss=3948645.714 l1=3.97e-05 coef=[0.09823041 0.05750635 0.00081037] R0=1.6844293686780047 lr=1e-06 cn=0.0
k=1108 iter=348 loss=3936741.333 l1=3.81e-05 coef=[0.1037551  0.05621448 0.00021134] R0=1.8387875839001993 lr=0.0001 cn=0.0
k=1110 iter=360 loss=3910245.714 l1=3.81e-05 coef=[0.10119926 0.05579048 0.00053343] R0=1.7967371279374311 lr=0.0001 cn=0.0
k=1112 iter=10 loss=2551655.238 l1=3.18e-05 coef=[0.11186651 0.0538629  0.00042501] R0=2.060615567523184 lr=1e-06 cn=0.0
k=1114 iter=10 loss=2466245.143 l1=2.99e-05 coef=[0.11418129 0.05219892 0.00025468] R0=2.176805518909315 lr=1e-06 cn=0.0
k=1115 iter=500 loss=2436684.952 l1=2.93e-05 coef=[0.1153097  0.05215114 0.00040011] R0=2.194233305746346 lr=0.0001 cn=0.0
k=1116 iter=500 loss=2519341.714 l1=3.02e-05 coef=[0.11457342 0.05174502 0.00033293] R0=2.200036972470257 lr=0.0001 cn=0.0
k=1117 iter=21 loss=2593895.810 l1=3.17e-05 coef=[0.11242752 0.05182574 0.00021226] R0=2.16048900161198 lr=1e-06 cn=0.0
k=1118 iter=500 loss=2752679.619 l1=3.07e-05 coef=[0.12373856 0.05266017 0.00033972] R0=2.334694875159245 lr=0.0001 cn=0.0
k=1119 iter=500 loss=2976821.524 l1=3.25e-05 coef=[0.12795905 0.05157017 0.00036925] R0=2.4636212644729043 lr=0.01 cn=0.0
k=1120 iter=252 loss=2962445.143 l1=3.35e-05 coef=[0.13188458 0.05090741 0.00032852] R0=2.574064261914312 lr=0.0001 cn=0.0
k=1121 iter=210 loss=3019805.524 l1=3.45e-05 coef=[0.1352201  0.05007362 0.00032533] R0=2.6829940408532345 lr=0.0001 cn=0.0
k loss loss_l1 it R0 lr correctness beta mu nu
date
2/18/20 7 2.891718e+00 2.303481e-08 4 1.755209 100.000000 0.0 0.058341 0.032862 0.000377
2/25/20 14 3.505975e+00 3.045653e-08 4 1.550511 100.000000 0.0 0.094437 0.048488 0.012420
3/3/20 21 2.104763e+00 2.005013e-08 4 0.940009 100.000000 0.0 0.050420 0.030081 0.023556
3/10/20 28 1.543911e+01 6.505900e-08 4 0.984412 1000000.000000 0.0 0.180457 0.014004 0.169311
3/17/20 35 6.227478e+03 9.652500e-07 4 2.110052 1.000000 0.0 0.440427 0.022234 0.186494
3/24/20 42 6.308186e+04 2.965118e-06 9 1.737287 1.000000 0.0 0.371049 0.006234 0.207346
3/31/20 49 1.424381e+06 1.517402e-05 4 3.719261 0.000001 0.0 0.352930 0.002565 0.092327
4/7/20 56 3.207283e+06 2.899614e-05 44 1.433960 0.000100 0.0 0.124689 0.005750 0.081204
4/14/20 63 2.402314e+08 1.389720e-04 58 5.339499 0.000001 0.0 0.131472 0.005220 0.019403
4/21/20 70 2.608814e+08 1.555599e-04 500 2.303894 0.000100 0.0 0.049121 0.011326 0.009995


Saving the results.

df.index = to_datetime(df.index)
dfcoef.index = to_datetime(dfcoef.index)
df.to_csv("plot_covid_france_sird.data.csv", index=True)
dfcoef.to_csv("plot_covid_france_sird.model.csv", index=True)
somewhereaftercovid_39_std/aftercovid/examples/plot_covid_france_sird.py:106: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.
  df.index = to_datetime(df.index)
somewhereaftercovid_39_std/aftercovid/examples/plot_covid_france_sird.py:107: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.
  dfcoef.index = to_datetime(dfcoef.index)

Statistiques.

k loss loss_l1 it R0 lr correctness beta mu nu
count 174.000000 1.740000e+02 1.740000e+02 174.000000 174.000000 174.000000 174.0 174.000000 174.000000 174.000000
mean 607.425287 2.557071e+09 5.653160e-04 379.810345 1.874943 5748.885303 0.0 0.076851 0.047939 0.006321
std 344.758880 6.280747e+09 7.879601e-04 193.761201 1.461673 75809.671371 0.0 0.055726 0.024174 0.026544
min 7.000000 2.104763e+00 2.005013e-08 4.000000 0.000442 0.000001 0.0 0.000100 0.002565 0.000100
25% 309.750000 1.363983e+07 6.601981e-05 245.250000 0.760013 0.000001 0.0 0.046232 0.031679 0.000320
50% 612.500000 1.696338e+08 2.114596e-04 500.000000 1.486311 0.000001 0.0 0.065023 0.046304 0.000553
75% 915.250000 1.616216e+09 7.449513e-04 500.000000 2.552096 0.000001 0.0 0.097657 0.061642 0.001053
max 1121.000000 4.108046e+10 4.068674e-03 500.000000 7.889542 1000000.000000 0.0 0.440427 0.186579 0.207346


Fin de la période pour la série originale.

df.tail(n=10)
deaths confirmed recovered infected safe
2023-02-28 161335.003206 3.857669e+07 3.834393e+07 72661.0 2.842207e+07
2023-03-01 161358.912460 3.858071e+07 3.834744e+07 73201.0 2.841800e+07
2023-03-02 161378.996234 3.858442e+07 3.835067e+07 73740.0 2.841422e+07
2023-03-03 161399.080007 3.858726e+07 3.835363e+07 73569.0 2.841140e+07
2023-03-04 161417.387665 3.859069e+07 3.835635e+07 73569.0 2.840866e+07
2023-03-05 161435.968571 3.859429e+07 3.835907e+07 73569.0 2.840592e+07
2023-03-06 161452.705049 3.860151e+07 3.836405e+07 76051.0 2.839844e+07
2023-03-07 161475.657933 3.860777e+07 3.836844e+07 78139.0 2.839195e+07
2023-03-08 161501.479928 3.861292e+07 3.837193e+07 79983.0 2.838659e+07
2023-03-09 161512.000000 3.861851e+07 3.837547e+07 82286.0 2.838074e+07


Fin de la période pour l’estimation.

k loss loss_l1 it R0 lr correctness beta mu nu
date
2023-02-25 1110 3.910246e+06 0.000038 360 1.796737 0.000100 0.0 0.101199 0.055790 0.000533
2023-02-27 1112 2.551655e+06 0.000032 10 2.060616 0.000001 0.0 0.111867 0.053863 0.000425
2023-03-01 1114 2.466245e+06 0.000030 10 2.176806 0.000001 0.0 0.114181 0.052199 0.000255
2023-03-02 1115 2.436685e+06 0.000029 500 2.194233 0.000100 0.0 0.115310 0.052151 0.000400
2023-03-03 1116 2.519342e+06 0.000030 500 2.200037 0.000100 0.0 0.114573 0.051745 0.000333
2023-03-04 1117 2.593896e+06 0.000032 21 2.160489 0.000001 0.0 0.112428 0.051826 0.000212
2023-03-05 1118 2.752680e+06 0.000031 500 2.334695 0.000100 0.0 0.123739 0.052660 0.000340
2023-03-06 1119 2.976822e+06 0.000033 500 2.463621 0.010000 0.0 0.127959 0.051570 0.000369
2023-03-07 1120 2.962445e+06 0.000033 252 2.574064 0.000100 0.0 0.131885 0.050907 0.000329
2023-03-08 1121 3.019806e+06 0.000035 210 2.682994 0.000100 0.0 0.135220 0.050074 0.000325


Graphe.

dfcoef['R0=1'] = 1

fig, ax = plt.subplots(2, 3, figsize=(14, 6))
with warnings.catch_warnings():
    warnings.simplefilter("ignore", DeprecationWarning)
    dfcoef[["mu", "nu"]].plot(ax=ax[0, 0], logy=True)
    dfcoef[["beta"]].plot(ax=ax[0, 1], logy=True)
    dfcoef[["loss_l1"]].plot(ax=ax[1, 0], logy=True)
    dfcoef[["R0", "R0=1"]].plot(ax=ax[0, 2])
    df.drop('safe', axis=1).plot(ax=ax[1, 1], logy=True)
    for i in range(ax.shape[1]):
        for tick in ax[1, i].get_xticklabels():
            tick.set_rotation(30)
    ax[0, 2].set_ylim(0, 5)
    fig.suptitle('Estimation de R0 tout au long de la période\n'
                 'Estimation sur 3 semaines', fontsize=12)
plt.show()
Estimation de R0 tout au long de la période Estimation sur 3 semaines

Graphe sur les dernières valeurs.

dfcoeflast = dfcoef.iloc[-30:, :]
dflast = df.iloc[-30:, :]

fig, ax = plt.subplots(2, 3, figsize=(14, 6))
with warnings.catch_warnings():
    warnings.simplefilter("ignore", DeprecationWarning)
    dfcoeflast[["mu", "nu"]].plot(ax=ax[0, 0], logy=True)
    dfcoeflast[["beta"]].plot(ax=ax[0, 1], logy=True)
    dfcoeflast[["loss_l1"]].plot(ax=ax[1, 0], logy=True)
    dfcoeflast[["R0", "R0=1"]].plot(ax=ax[0, 2])
    dflast.drop('safe', axis=1).plot(ax=ax[1, 1], logy=True)
    for i in range(ax.shape[1]):
        for tick in ax[1, i].get_xticklabels():
            tick.set_rotation(30)
    ax[0, 2].set_ylim(0, 5)
    fig.suptitle('Estimation de R0 sur la fin de la période', fontsize=12)
Estimation de R0 sur la fin de la période

Sur 21 jours mais seulement les 5 derniers mois

model = CovidSIRD()
print(model.quantity_names)

cols = ['safe', 'infected', 'recovered', 'deaths']
data = df[cols].values.astype(numpy.float32)
print(data[:5])

X = data[:-1]
y = data[1:] - data[:-1]
dates = df.index[:-1]

Nlast = 150
X = X[-Nlast:]
y = y[-Nlast:]
dates = dates[-Nlast:]
['S', 'I', 'R', 'D']
[[6.7e+07 0.0e+00 0.0e+00 0.0e+00]
 [6.7e+07 1.0e+00 0.0e+00 0.0e+00]
 [6.7e+07 1.0e+00 0.0e+00 0.0e+00]
 [6.7e+07 2.0e+00 0.0e+00 0.0e+00]
 [6.7e+07 2.0e+00 0.0e+00 0.0e+00]]

Estimation.

# 3 semaines car les séries sont cycliques
dfcoef, model = rolling_estimation(
    X, y, delay=21, dates=dates, verbose=1)
dfcoef.head(n=10)
k=7 iter=500 loss=1434142915.048 l1=0.000762 coef=[0.08860218 0.05879108 0.00031431] R0=1.4990541796102697 lr=0.0001 cn=0.0
k=14 iter=500 loss=1071227757.714 l1=0.000639 coef=[0.07806172 0.07015448 0.00031473] R0=1.1077424224499977 lr=1e-06 cn=0.0
k=21 iter=500 loss=1039745511.619 l1=0.000629 coef=[0.08855777 0.07344899 0.00032802] R0=1.2003436928532791 lr=1e-06 cn=0.0
k=28 iter=500 loss=1212379721.143 l1=0.000661 coef=[0.12421929 0.05969093 0.0009348 ] R0=2.048953113784741 lr=1e-06 cn=0.0
k=35 iter=500 loss=1028761307.429 l1=0.000642 coef=[0.15192492 0.03808172 0.00047167] R0=3.9406376928496094 lr=1e-06 cn=0.0
k=42 iter=500 loss=1328486400.000 l1=0.000727 coef=[0.15124525 0.03463088 0.00028555] R0=4.331634935661366 lr=1e-06 cn=0.0
k=49 iter=500 loss=1394189458.286 l1=0.000806 coef=[0.13454822 0.03822764 0.00019804] R0=3.5015182751751763 lr=1e-06 cn=0.0
k=56 iter=500 loss=1537539900.952 l1=0.000775 coef=[0.11534182 0.04519966 0.00018231] R0=2.541578106681557 lr=1e-06 cn=0.0
k=63 iter=500 loss=1573647701.333 l1=0.000795 coef=[0.09501238 0.05347822 0.00010693] R0=1.7731104230941035 lr=1e-06 cn=0.0
k=70 iter=500 loss=1726216289.524 l1=0.000893 coef=[0.07283113 0.06374971 0.00089257] R0=1.1266795992454748 lr=1e-06 cn=0.0
k=77 iter=500 loss=1439144911.238 l1=0.000788 coef=[0.05214541 0.0744622  0.00059289] R0=0.694761817163888 lr=1e-06 cn=0.0
k=84 iter=500 loss=887340470.857 l1=0.000543 coef=[0.03054242 0.0912617  0.00099233] R0=0.3310687029926439 lr=1e-06 cn=0.0
k=91 iter=500 loss=351769721.905 l1=0.000326 coef=[0.03406284 0.10620676 0.00050975] R0=0.3191899285609686 lr=1e-06 cn=0.0
k=98 iter=500 loss=195825932.190 l1=0.000247 coef=[0.0131623  0.08639508 0.00158769] R0=0.14960091031524525 lr=1e-06 cn=0.0
k=102 iter=43 loss=85435318.857 l1=0.000146 coef=[0.08457618 0.07709408 0.00125003] R0=1.0795473659127144 lr=1e-06 cn=0.0
k=104 iter=500 loss=67223692.190 l1=0.00014 coef=[0.04462686 0.07130821 0.00046777] R0=0.6217520484505319 lr=0.0001 cn=0.0
k=106 iter=37 loss=12896294.095 l1=6.89e-05 coef=[0.08665287 0.06312108 0.000462  ] R0=1.3628289921946053 lr=1e-06 cn=0.0
k=108 iter=40 loss=9242091.429 l1=5.36e-05 coef=[0.0908856 0.057822  0.0001661] R0=1.567314694591474 lr=1e-06 cn=0.0
k=110 iter=500 loss=8647186.286 l1=5.25e-05 coef=[0.08576591 0.05761495 0.00024899] R0=1.482199926935429 lr=0.0001 cn=0.0
k=112 iter=22 loss=3899412.571 l1=4.02e-05 coef=[0.0977278  0.05817657 0.00055547] R0=1.6639606373944924 lr=1e-06 cn=0.0
k=114 iter=16 loss=3944801.905 l1=3.86e-05 coef=[0.09908153 0.05667618 0.0004405 ] R0=1.73472141781078 lr=1e-06 cn=0.0
k=116 iter=500 loss=3936642.667 l1=3.83e-05 coef=[0.1026867  0.05595502 0.00053481] R0=1.8177912004380252 lr=0.0001 cn=0.0
k=118 iter=500 loss=3911171.429 l1=3.82e-05 coef=[0.10067943 0.05610836 0.00051552] R0=1.7780383887869764 lr=0.0001 cn=0.0
k=120 iter=500 loss=2550246.667 l1=3.17e-05 coef=[0.11103374 0.05362254 0.00042146] R0=2.0545064097443477 lr=0.0001 cn=0.0
k=122 iter=500 loss=2466708.190 l1=2.99e-05 coef=[0.11514822 0.05240309 0.00046722] R0=2.1779371303641932 lr=0.0001 cn=0.0
k=123 iter=68 loss=2437291.619 l1=2.97e-05 coef=[0.11397811 0.05229652 0.0003583 ] R0=2.164628145483819 lr=0.0001 cn=0.0
k=124 iter=500 loss=2517924.381 l1=3.07e-05 coef=[0.11390351 0.05203526 0.00050613] R0=2.1678816853115097 lr=0.0001 cn=0.0
k=125 iter=361 loss=2596028.762 l1=3.21e-05 coef=[0.11237416 0.05159583 0.00074905] R0=2.1468033117350447 lr=0.0001 cn=0.0
k=126 iter=500 loss=2752494.476 l1=3.05e-05 coef=[0.12378253 0.0523144  0.00026243] R0=2.3543173180449393 lr=0.0001 cn=0.0
k=127 iter=7 loss=2977574.667 l1=3.28e-05 coef=[0.12890803 0.05177578 0.00034133] R0=2.4734299338181382 lr=1e-06 cn=0.0
k=128 iter=500 loss=2962213.524 l1=3.32e-05 coef=[0.1307333  0.05046774 0.00027645] R0=2.576320745698173 lr=0.0001 cn=0.0
k=129 iter=6 loss=3021547.429 l1=3.44e-05 coef=[0.13367671 0.04973145 0.00051656] R0=2.6603382210178297 lr=1e-06 cn=0.0
k loss loss_l1 it R0 lr correctness beta mu nu
date
2022-11-06 7 1.434143e+09 0.000762 500 1.499054 0.000100 0.0 0.088602 0.058791 0.000314
2022-11-13 14 1.071228e+09 0.000639 500 1.107742 0.000001 0.0 0.078062 0.070154 0.000315
2022-11-20 21 1.039746e+09 0.000629 500 1.200344 0.000001 0.0 0.088558 0.073449 0.000328
2022-11-27 28 1.212380e+09 0.000661 500 2.048953 0.000001 0.0 0.124219 0.059691 0.000935
2022-12-04 35 1.028761e+09 0.000642 500 3.940638 0.000001 0.0 0.151925 0.038082 0.000472
2022-12-11 42 1.328486e+09 0.000727 500 4.331635 0.000001 0.0 0.151245 0.034631 0.000286
2022-12-18 49 1.394189e+09 0.000806 500 3.501518 0.000001 0.0 0.134548 0.038228 0.000198
2022-12-25 56 1.537540e+09 0.000775 500 2.541578 0.000001 0.0 0.115342 0.045200 0.000182
2023-01-01 63 1.573648e+09 0.000795 500 1.773110 0.000001 0.0 0.095012 0.053478 0.000107
2023-01-08 70 1.726216e+09 0.000893 500 1.126680 0.000001 0.0 0.072831 0.063750 0.000893


Statistiques.

k loss loss_l1 it R0 lr correctness beta mu nu
count 32.00000 3.200000e+01 32.000000 32.000000 32.000000 32.000000 32.0 32.000000 32.000000 32.000000
mean 89.03125 5.138699e+08 0.000317 378.125000 1.826568 0.000038 0.0 0.097077 0.059809 0.000508
std 38.38219 6.457134e+08 0.000330 205.981169 0.969408 0.000049 0.0 0.033948 0.015322 0.000323
min 7.00000 2.437292e+06 0.000030 6.000000 0.149601 0.000001 0.0 0.013162 0.034631 0.000107
25% 61.25000 3.010554e+06 0.000034 287.750000 1.181928 0.000001 0.0 0.085468 0.051970 0.000307
50% 105.00000 4.005999e+07 0.000105 500.000000 1.775574 0.000001 0.0 0.099880 0.056392 0.000465
75% 120.50000 1.106516e+09 0.000647 500.000000 2.222032 0.000100 0.0 0.117452 0.065351 0.000540
max 129.00000 1.726216e+09 0.000893 500.000000 4.331635 0.000100 0.0 0.151925 0.106207 0.001588


Fin de la période pour la série originale.

df.tail(n=10)
deaths confirmed recovered infected safe
2023-02-28 161335.003206 3.857669e+07 3.834393e+07 72661.0 2.842207e+07
2023-03-01 161358.912460 3.858071e+07 3.834744e+07 73201.0 2.841800e+07
2023-03-02 161378.996234 3.858442e+07 3.835067e+07 73740.0 2.841422e+07
2023-03-03 161399.080007 3.858726e+07 3.835363e+07 73569.0 2.841140e+07
2023-03-04 161417.387665 3.859069e+07 3.835635e+07 73569.0 2.840866e+07
2023-03-05 161435.968571 3.859429e+07 3.835907e+07 73569.0 2.840592e+07
2023-03-06 161452.705049 3.860151e+07 3.836405e+07 76051.0 2.839844e+07
2023-03-07 161475.657933 3.860777e+07 3.836844e+07 78139.0 2.839195e+07
2023-03-08 161501.479928 3.861292e+07 3.837193e+07 79983.0 2.838659e+07
2023-03-09 161512.000000 3.861851e+07 3.837547e+07 82286.0 2.838074e+07


Fin de la période pour l’estimation.

k loss loss_l1 it R0 lr correctness beta mu nu
date
2023-02-25 118 3.911171e+06 0.000038 500 1.778038 0.000100 0.0 0.100679 0.056108 0.000516
2023-02-27 120 2.550247e+06 0.000032 500 2.054506 0.000100 0.0 0.111034 0.053623 0.000421
2023-03-01 122 2.466708e+06 0.000030 500 2.177937 0.000100 0.0 0.115148 0.052403 0.000467
2023-03-02 123 2.437292e+06 0.000030 68 2.164628 0.000100 0.0 0.113978 0.052297 0.000358
2023-03-03 124 2.517924e+06 0.000031 500 2.167882 0.000100 0.0 0.113904 0.052035 0.000506
2023-03-04 125 2.596029e+06 0.000032 361 2.146803 0.000100 0.0 0.112374 0.051596 0.000749
2023-03-05 126 2.752494e+06 0.000031 500 2.354317 0.000100 0.0 0.123783 0.052314 0.000262
2023-03-06 127 2.977575e+06 0.000033 7 2.473430 0.000001 0.0 0.128908 0.051776 0.000341
2023-03-07 128 2.962214e+06 0.000033 500 2.576321 0.000100 0.0 0.130733 0.050468 0.000276
2023-03-08 129 3.021547e+06 0.000034 6 2.660338 0.000001 0.0 0.133677 0.049731 0.000517


Graphe.

dfcoef['R0=1'] = 1

fig, ax = plt.subplots(2, 3, figsize=(14, 6))
with warnings.catch_warnings():
    warnings.simplefilter("ignore", DeprecationWarning)
    dfcoef[["mu", "nu"]].plot(ax=ax[0, 0], logy=True)
    dfcoef[["beta"]].plot(ax=ax[0, 1], logy=True)
    dfcoef[["loss_l1"]].plot(ax=ax[1, 0], logy=True)
    dfcoef[["R0", "R0=1"]].plot(ax=ax[0, 2])
    df[-Nlast:].drop('safe', axis=1).plot(ax=ax[1, 1], logy=True)
    for i in range(ax.shape[1]):
        for tick in ax[1, i].get_xticklabels():
            tick.set_rotation(30)
    ax[0, 2].set_ylim(0, 5)
    fig.suptitle('Estimation de R0 tout au long de la période\n'
                 'Estimation sur 3 semaines', fontsize=12)
plt.show()
Estimation de R0 tout au long de la période Estimation sur 3 semaines

Graphe sur les dernières valeurs.

dfcoeflast = dfcoef.iloc[-30:, :]
dflast = df.iloc[-30:, :]

fig, ax = plt.subplots(2, 3, figsize=(14, 6))
with warnings.catch_warnings():
    warnings.simplefilter("ignore", DeprecationWarning)
    dfcoeflast[["mu", "nu"]].plot(ax=ax[0, 0], logy=True)
    dfcoeflast[["beta"]].plot(ax=ax[0, 1], logy=True)
    dfcoeflast[["loss_l1"]].plot(ax=ax[1, 0], logy=True)
    dfcoeflast[["R0", "R0=1"]].plot(ax=ax[0, 2])
    dflast.drop('safe', axis=1).plot(ax=ax[1, 1], logy=True)
    for i in range(ax.shape[1]):
        for tick in ax[1, i].get_xticklabels():
            tick.set_rotation(30)
    ax[0, 2].set_ylim(0, 5)
    fig.suptitle('Estimation de R0 sur la fin de la période', fontsize=12)
plt.show()
Estimation de R0 sur la fin de la période

Prédictions

Ce ne sont pas seulement des prédictions mais des prédictions en boucle à partir d’un état initial. On utilise la méthode simulate.

predictions = model.simulate(X[-30:], 21)
dfp = pandas.DataFrame(
    predictions[9], columns='Spred Ipred Rpred Dpred'.split()).set_index(
        pandas.to_datetime(dates[-21:]))
dfp.tail()
Spred Ipred Rpred Dpred
2023-03-04 28398684.0 79843.546875 38359820.0 161653.031250
2023-03-05 28394160.0 80355.531250 38363792.0 161694.265625
2023-03-06 28389608.0 80870.070312 38367788.0 161735.781250
2023-03-07 28385028.0 81387.171875 38371808.0 161777.546875
2023-03-08 28380418.0 81906.835938 38375856.0 161819.593750


On représente les prédictions. Ipred est la valeur prédite, Itrue est la valeur connue. Idem pour Dpred et Dtrue.

fig, ax = plt.subplots(2, 3, figsize=(14, 6))

dfp = pandas.DataFrame(
    predictions[9], columns='S Ipred R Dpred'.split()).set_index(
        pandas.to_datetime(dates[-21:]))
dfp[["Ipred"]].plot(ax=ax[0, 0])
dfp[["Dpred"]].plot(ax=ax[1, 0])
dfp = pandas.DataFrame(
    X[-21:], columns='S Itrue R Dtrue'.split()).set_index(
        pandas.to_datetime(dates[-21:]))
dfp[["Itrue"]].plot(ax=ax[0, 0])
dfp[["Dtrue"]].plot(ax=ax[1, 0])
ax[0, 0].set_title(f"Prediction à partir de {dates[-21]}")

dt = pandas.to_datetime(dates[-7])
dates2 = pandas.to_datetime([dt + timedelta(i) for i in range(21)])
dfp = pandas.DataFrame(
    predictions[-7], columns='S Ipred R Dpred'.split()).set_index(dates2)
dfp[["Ipred"]].plot(ax=ax[0, 1])
dfp[["Dpred"]].plot(ax=ax[1, 1])
dfp = pandas.DataFrame(
    X[-7:], columns='S Itrue R Dtrue'.split()).set_index(
        pandas.to_datetime(dates[-7:]))
dfp[["Itrue"]].plot(ax=ax[0, 1])
dfp[["Dtrue"]].plot(ax=ax[1, 1])
ax[0, 1].set_title(f"Prediction à partir de {dates[-7]}")

dt = pandas.to_datetime(dates[-1])
dates2 = pandas.to_datetime([dt + timedelta(i) for i in range(21)])
dfp = pandas.DataFrame(
    predictions[-1], columns='S Ipred R Dpred'.split()).set_index(dates2)
dfp[["Ipred"]].plot(ax=ax[0, 2])
dfp[["Dpred"]].plot(ax=ax[1, 2])
ax[0, 1].set_title(f"Prediction à partir de {dates[-1]}")
Prediction à partir de 2023-02-16 00:00:00, Prediction à partir de 2023-03-08 00:00:00

Ces prédictions varient beaucoup car une petite imprécision sur l’estimation a beaucoup d’impact à moyen terme.

predictions = model.simulate(X[-1:], 98)
fig, ax = plt.subplots(1, 2, figsize=(14, 6))
dt = pandas.to_datetime(dates[-1])
dates2 = pandas.to_datetime([dt + timedelta(i) for i in range(98)])
dfp = pandas.DataFrame(
    predictions[-1], columns='S Ipred R Dpred'.split()).set_index(dates2)
dfp[["Ipred"]].plot(ax=ax[0])
dfp[["Dpred"]].plot(ax=ax[1])
ax[1].set_title(f"Prediction à partir de {dates[-1]}")
Prediction à partir de 2023-03-08 00:00:00

Taille fenêtre glissante sur 7 jours

On fait varier le paramètre delay pour voir comment le modèle réagit. Sur 7 jours d’abord.

dfcoef, model = rolling_estimation(X, y, delay=7, verbose=1, dates=dates)
dfcoef.index = to_datetime(dfcoef.index)
dfcoef.tail()
k=7 iter=500 loss=459194221.714 l1=0.000462 coef=[0.10413197 0.04717201 0.00018073] R0=2.1990696396144713 lr=1e-06 cn=0.0
k=14 iter=500 loss=825453860.571 l1=0.000582 coef=[0.07592622 0.06159347 0.00037531] R0=1.2252334884565497 lr=0.0001 cn=0.0
k=21 iter=500 loss=1458712868.571 l1=0.000765 coef=[0.07690411 0.07824106 0.00065739] R0=0.9747226360819895 lr=1e-06 cn=0.0
k=28 iter=500 loss=579232804.571 l1=0.000485 coef=[0.07940244 0.08123639 0.00012239] R0=0.9759541994776542 lr=1e-06 cn=0.0
k=35 iter=500 loss=330783561.143 l1=0.000399 coef=[1.29348421e-01 5.49282249e-02 1.15750909e-04] R0=2.3499105713892203 lr=0.0001 cn=0.0
k=42 iter=500 loss=1010395428.571 l1=0.000585 coef=[0.16642019 0.04216944 0.00074512] R0=3.8779428004947545 lr=1e-06 cn=0.0
k=49 iter=500 loss=1345019757.714 l1=0.00074 coef=[0.15615481 0.03085097 0.0011648 ] R0=4.8774352716457505 lr=1e-06 cn=0.0
k=56 iter=500 loss=1542227382.857 l1=0.000807 coef=[1.45796699e-01 3.53305195e-02 1.03123681e-04] R0=4.114640393164479 lr=0.0001 cn=0.0
k=63 iter=500 loss=656385974.857 l1=0.000545 coef=[0.11727883 0.04269058 0.00040492] R0=2.721370374208153 lr=1e-06 cn=0.0
k=70 iter=500 loss=679450038.857 l1=0.000519 coef=[0.09035414 0.05533808 0.00060865] R0=1.6150030223095024 lr=1e-06 cn=0.0
k=77 iter=500 loss=1475772708.571 l1=0.000743 coef=[0.06216036 0.06704066 0.00091326] R0=0.9147428931892116 lr=1e-06 cn=0.0
k=84 iter=500 loss=1530701238.857 l1=0.000736 coef=[0.03978229 0.08322023 0.00056578] R0=0.47480820856834216 lr=1e-06 cn=0.0
k=91 iter=500 loss=500538660.571 l1=0.000443 coef=[0.05828242 0.11302126 0.00228272] R0=0.5054675635733086 lr=1e-06 cn=0.0
k=98 iter=264 loss=430398793.143 l1=0.000385 coef=[0.00010007 0.09869137 0.00471789] R0=0.0009676979562306787 lr=1e-06 cn=0.0
k=105 iter=38 loss=41110244.571 l1=0.000134 coef=[0.07633005 0.08246203 0.00100676] R0=0.9144741152366797 lr=1e-06 cn=0.0
k=112 iter=175 loss=5671357.714 l1=5.23e-05 coef=[0.0928657  0.05774738 0.00039174] R0=1.5973014722302072 lr=0.0001 cn=0.0
k=116 iter=500 loss=5938352.571 l1=4.89e-05 coef=[0.08860785 0.05785806 0.0001    ] R0=1.5288270650772289 lr=1 cn=0.0
k=118 iter=102 loss=5381170.857 l1=4.82e-05 coef=[0.08149372 0.05521315 0.00047937] R0=1.4632794312763377 lr=0.0001 cn=0.0
k=120 iter=4 loss=3061721.714 l1=3.6e-05 coef=[0.0923222  0.05259006 0.00050195] R0=1.7389097071534811 lr=1e-06 cn=0.0
k=122 iter=37 loss=3145291.429 l1=3.81e-05 coef=[0.09629939 0.05320424 0.00068264] R0=1.7870653988497573 lr=0.0001 cn=0.0
k=124 iter=99 loss=2697562.857 l1=3.09e-05 coef=[0.09924633 0.05790479 0.00031417] R0=1.7047080404401151 lr=0.0001 cn=0.0
k=126 iter=4 loss=857498.857 l1=2.12e-05 coef=[0.11661404 0.05936763 0.00049482] R0=1.9480333196609876 lr=1e-06 cn=0.0
k=128 iter=4 loss=1236140.000 l1=2.29e-05 coef=[0.12378091 0.05994085 0.00036946] R0=2.0524004632769617 lr=1e-06 cn=0.0
k=130 iter=4 loss=1166475.857 l1=1.86e-05 coef=[0.13092444 0.05597852 0.0004004 ] R0=2.322223205756386 lr=1e-06 cn=0.0
k=132 iter=233 loss=1654269.571 l1=2.41e-05 coef=[0.12268118 0.05325804 0.00030566] R0=2.2903791445178685 lr=0.0001 cn=0.0
k=134 iter=500 loss=931063.500 l1=2.08e-05 coef=[0.12594352 0.046916   0.00062141] R0=2.649355832926697 lr=0.01 cn=0.0
k=136 iter=6 loss=778942.643 l1=1.7e-05 coef=[0.12219796 0.0446022  0.00022455] R0=2.726005365437871 lr=0.0001 cn=0.0
k=137 iter=483 loss=986507.571 l1=2.07e-05 coef=[0.11972859 0.04412802 0.00057191] R0=2.678495812689472 lr=0.01 cn=0.0
k=138 iter=4 loss=1097911.571 l1=2.21e-05 coef=[0.11617128 0.0431639  0.00016607] R0=2.6810838628471925 lr=1e-06 cn=0.0
k=139 iter=5 loss=1184762.643 l1=2.33e-05 coef=[0.11516136 0.04272757 0.00015421] R0=2.6855549771067775 lr=0.0001 cn=0.0
k=140 iter=500 loss=3928794.857 l1=3.86e-05 coef=[0.13227818 0.04689042 0.00053967] R0=2.788908929578268 lr=0.0001 cn=0.0
k=141 iter=175 loss=4701908.571 l1=4.6e-05 coef=[0.13964527 0.04775765 0.00015932] R0=2.914317629429115 lr=0.0001 cn=0.0
k=142 iter=55 loss=4870513.714 l1=4.9e-05 coef=[0.14240803 0.0469802  0.00043434] R0=3.0034673375927774 lr=0.0001 cn=0.0
k=143 iter=4 loss=5040870.286 l1=5.06e-05 coef=[0.15059935 0.04732331 0.00037945] R0=3.157036408568205 lr=1e-06 cn=0.0
k loss loss_l1 it R0 lr correctness beta mu nu
date
2023-03-04 139 1.184763e+06 0.000023 5 2.685555 0.000100 0.0 0.115161 0.042728 0.000154
2023-03-05 140 3.928795e+06 0.000039 500 2.788909 0.000100 0.0 0.132278 0.046890 0.000540
2023-03-06 141 4.701909e+06 0.000046 175 2.914318 0.000100 0.0 0.139645 0.047758 0.000159
2023-03-07 142 4.870514e+06 0.000049 55 3.003467 0.000100 0.0 0.142408 0.046980 0.000434
2023-03-08 143 5.040870e+06 0.000051 4 3.157036 0.000001 0.0 0.150599 0.047323 0.000379


Graphe.

dfcoef['R0=1'] = 1


fig, ax = plt.subplots(2, 3, figsize=(14, 6))
with warnings.catch_warnings():
    warnings.simplefilter("ignore", DeprecationWarning)
    dfcoef[["mu", "nu"]].plot(ax=ax[0, 0], logy=True)
    dfcoef[["beta"]].plot(ax=ax[0, 1], logy=True)
    dfcoef[["loss_l1"]].plot(ax=ax[1, 0], logy=True)
    dfcoef[["R0", "R0=1"]].plot(ax=ax[0, 2])
    df[-Nlast:].drop('safe', axis=1).plot(ax=ax[1, 1], logy=True)
    for i in range(ax.shape[1]):
        for tick in ax[1, i].get_xticklabels():
            tick.set_rotation(30)
    ax[0, 2].set_ylim(0, 5)
    fig.suptitle('Estimation de R0 tout au long de la période\n'
                 'Estimation sur 1 semaine', fontsize=12)
plt.show()
Estimation de R0 tout au long de la période Estimation sur 1 semaine

Total running time of the script: ( 87 minutes 50.934 seconds)

Gallery generated by Sphinx-Gallery