İtalyan Covid-19 virüsü enfeksiyonu matematiksel modeli ve tahmini (ekli kod)

Kaynak: DeepHub IMBA

Bu makale hakkında 2400 kelime , Okumanız tavsiye edilir 9 dakika

Bu makale, enfeksiyon büyümesinin basit bir matematiksel analizini ve enfeksiyonun evrimini daha iyi anlamak için iki modeli göstermek için Python kullanacaktır.

Etiket: Makine Öğrenimi

Bugün dünya yeni bir düşmanla savaşıyor ve bu Covid-19 virüsü.

Virüs, ortaya çıktığından bu yana tüm dünyaya hızla yayıldı. Ne yazık ki, İtalya'daki Covid-19 enfeksiyonlarının sayısı 115.242 ile (3 Nisan 2020 itibariyle) Avrupa'da en yüksek. Batı dünyasında bu yeni düşmanla karşı karşıya kalan ilk ülkeyiz ve her gün bu virüsün ekonomik ve sosyal etkisiyle savaşıyoruz.

Bu makalede, enfeksiyon büyümesinin basit bir matematiksel analizini ve enfeksiyonun evrimini daha iyi anlamak için iki model göstermek için Python'u kullanacağım.

Veri toplama

İtalyan Sivil Savunma Bakanlığı, enfekte kişilerin kümülatif verilerini her gün güncelliyor. Bu veriler, burada GitHub'da açık veriler olarak açıklanmaktadır:

https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-andamento-nazionale/dpc-covid19-ita-andamento-nazionale.csv

Amacım, şimdiye kadar enfekte olmuş kişilerin sayısının bir zaman serisi modelini oluşturmaktır (yani, enfekte olan gerçek kişi sayısı artı zaten enfekte olan kişi sayısı). Bu modellerin, eğri uydurma ile tahmin edilecek parametreleri vardır.

Python'da yapıyoruz.

Öncelikle bazı kütüphaneleri içeri aktaralım.

pandaları pdimport olarak np olarak pdimport numpy olarak datetime import datetime, timedeltafrom sklearn.metrics import mean_squared_errorfrom scipy.optimize import curve_fitfrom scipy.optimize import fsolveimport matplotlib.pyplot as plt% matplotlib inline

Şimdi orijinal verilere bakalım.

url = https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-andamento-nazionale/dpc-covid19-ita-andamento-nazionale.csvdf = pd.read_csv (url)

İhtiyacımız olan sütun, şimdiye kadarki kümülatif enfeksiyon sayısını içeren 'totale_casi' sütunudur.

Bu orijinal verilerdir. Şimdi analize hazırlanalım.

Veri Hazırlama

İlk önce tarihi bir sayı ile değiştirmemiz gerekiyor. 1 Ocak'tan itibaren saymaya başlayacağız.

df = df.locFMT = '% Y-% m-% d% H:% M:% S'date = dfdf = tarih.map (lambda x: (datetime.strptime (x, FMT) -datetime.strptime (" 2020-01-0100:00:00 ", FMT)). Günler)

Şimdi, test edilecek iki modeli, yani lojistik fonksiyonu ve üstel fonksiyonu analiz edebiliriz.

Her modelin, geçmiş veriler üzerinde eğri uydurma hesaplamalarıyla tahmin edilecek üç parametresi vardır.

Lojistik model

Lojistik model, nüfus artışını tanımlamak için yaygın olarak kullanılmaktadır. Enfeksiyon, patojenlerin sayısındaki artış olarak tanımlanabilir, bu nedenle lojistik bir model kullanmak mantıklı görünmektedir.

Bu formül, veri bilimcileri arasında çok ünlüdür çünkü lojistik regresyon sınıflandırıcılarında kullanılır ve sinir ağlarının aktivasyon işlevidir.

Lojistik fonksiyonun en genel ifadesi şudur:

Bu formülde, değişken x (bu zamandır) ve üç parametremiz var: a, b, c.

  • a enfeksiyon oranıdır;
  • b enfeksiyonun en çok meydana geldiği gündür;
  • c, enfeksiyonun sonunda kaydedilen toplam enfekte kişi sayısıdır.

Yüksek zaman değerlerinde, enfekte olan kişi sayısı c değerine gittikçe yaklaşmaktadır, bu da enfeksiyonun sona erdiğini söylediğimiz noktadır. Bu fonksiyon aynı zamanda, birinci türevin azalmaya başladığı nokta olan (yani, enfeksiyonun zayıflamaya ve azalmaya başladığı tepe) olan b noktasında bir bükülme noktasına sahiptir.

Modeli Python'da tanımlayalım:

def logistic_model (x, a, b, c): return c / (1 + np.exp (- (x-b) / a))

Orijinal verilerden parametre değerlerini ve hataları tahmin etmek için scipy kitaplığındaki curve_fit işlevini kullanabiliriz.

x = liste (df.iloc) y = liste (df.iloc) uyum = curve_fit (lojistik_model, x, y, p0 =)

İşte bazı değerler:

a = 3,54b = 68,00c = 15968,38

Bu fonksiyon aynı zamanda köşegen değeri parametrenin varyansı olan kovaryans matrisini de döndürür. Kareköklerini alarak standart hatayı hesaplayabiliriz. error =

· A'nın standart hatası: 0.24 · B'nin standart hatası: 1.53 · c: 4174.69'un standart hatası

Bu rakamlar bize birçok faydalı fikir veriyor.

Enfeksiyonun sonunda tahmini enfeksiyon sayısı 15968 +/- 4174'tür.

Enfeksiyonun zirvesinin 9 Mart 2020 civarında olması bekleniyor.

Beklenen bulaşma bitiş tarihi, enfekte kişilerin kümülatif sayısının en yakın tam sayı c parametresine yuvarlandığı gün olarak hesaplanabilir.

Enfeksiyonun sonunu tanımlayan denklemin kökünü hesaplamak için scipy'nin fsolve işlevini kullanabiliriz.

sol = int (fsolve (lambda x: logistic_model (x, a, b, c) -int (c), b))

Çözüm zamanı 15 Nisan 2020.

Üstel model

Lojistik model, gelecekte duracak enfeksiyonların büyümesini açıklarken, üstel model enfeksiyonların durdurulamaz büyümesini tanımlıyor. Örneğin, bir hasta her gün 2 hastayı enfekte ederse, 1 gün sonra 2, 2 gün sonra 4, 3 gün sonra 8, vb.

En yaygın üstel işlev:

X değişkeni zamandır, hala a, b, c parametrelerimiz var, ancak anlamı lojistik fonksiyon parametrelerinden farklı.

Bu fonksiyonu Python'da tanımlayalım ve lojistik büyüme ile aynı eğri uydurma işlemini gerçekleştirelim.

def exponential_model (x, a, b, c): return a * np.exp (b * (x-c)) exp_fit = curve_fit (exponential_model, x, y, p0 =)

Parametreler ve standart sapmaları:

· A: 0,0019 +/- 64,6796 · b: 0,2278 +/- 0,0073 · c: 0,50 +/- 144254,77

Çizim

Artık sonuçlarımızı görselleştirmek için gerekli tüm verilere sahibiz.

pred_x = list (range (max (x), sol)) plt.rcParams = plt.rc ('font', size = 14) ## Realdataplt.scatter (x, y, label = "Gerçek veri", renk = " red ") # Öngörülen lojistik eğri eğrisi.plot (x + pred_x ,, label =" Lojistik model ") # Öngörülen üstel eğri eğrisi.plot (x + pred_x ,, label =" Üstel model ") plt.legend () plt.xlabel ( "1 Ocak 2020'den beri geçen gün sayısı") plt.ylabel ("Toplam enfekte kişi sayısı") plt.ylim ((min (y) * 0.9, c * 1.1)) plt.show ()

Bu iki teorik eğri, deneysel eğilime çok yakın görünüyor. Hangisi daha iyi Kalıntılara bakalım.

Kalıntı analizi

Kalan, her deneysel nokta ile karşılık gelen teorik nokta arasındaki farktır. İki modelin kalıntılarını analiz ederek en iyi uyum eğrisini doğrulayabiliriz. İlk yaklaşımda, teorik ve deneysel verilerin ortalama kare hatası ne kadar küçükse, uyum o kadar iyi olur.

y_pred_logistic = y_pred_exp = mean_squared_error (y, y_pred_logistic) mean_squared_error (y, y_pred_exp)

Lojistik model MSE (ortalama kare hatası): 251977.62

Dizin modeli MSE: 2873584.27

Doğru model hangisi?

Artık analiz mantıksal modeli işaret ediyor gibi görünüyor. Muhtemelen enfeksiyonun gelecekte bir gün sona ermesi gerektiğinden; herkes enfekte olsa bile, yeniden enfeksiyonu önlemek için uygun bağışıklık savunma önlemleri geliştireceklerdir. Virüs çok fazla mutasyona uğramadığı sürece (örneğin grip virüsü), bu doğru modeldir.

Editör: Huang Jiyan

Redaksiyon: Hong Shuyue

-Bitiş-

Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " AI Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

10 PyCharm püf noktalarını bilmeli
önceki
Tarayıcıda yüzleri ve elleri izlemek için MediaPipe ve TensorFlow.js kullanın
Sonraki
Öneri sisteminde bilgi grafiğine dayalı negatif örnekleme modelinin uygulanması (açık kaynak)
Gelişmiş matematiksel denklemleri çözmek için sinir ağlarını kullanmayı öğretin!
Google Translate ezildi! Dünyanın ilk çeviri motoru DeepL geri döndü ve "çılgın ayrıntılar" bitti
Matplotlib çizimi için size 16 pratik ipucu gönderin (ekli kod)
Çin Bilim ve Teknoloji Üniversitesi × MSRA | Dr. Zhou Mingin Ders Kaydı: Doğal Dil İşleme Hayatı Daha İyi Hale Getiriyor
"Ürpertici" bir dönüm noktası: Çinli bilim insanları yapay zekası beyin dalgalarını% 97 doğrulukla çözüyor
Yeni taç araştırma verileri nerede bulunur? Bilimsel araştırma çalışanları için mutlaka görülmesi gereken bir yer (bağlantılı)
"Hey Siri" nin arkasındaki siyah teknoloji ortaya çıktı!
Grafiksel makine öğrenimi: herkesin anlayabileceği algoritma ilkeleri
Hücreleri bilgisayara dönüştürmek için protein mantık kapılarını kullanan Çinli genç bilim adamları bilim üzerine çalışıyor
Dünyanın ilk çeviri motoru evrimden döndü ve "ayrıntı çılgınlığı", klasik Çince lehçesini ele alıyor
"Virüs" yerine "bilgi" yay! Programcılar "el yıkamayı" 500'den fazla dilde tercüme ediyor
To Top