paint-brush
Python을 사용한 전염병 확산 시뮬레이션: SIR 및 SEIR 모델~에 의해@olaoluwa
2,261 판독값
2,261 판독값

Python을 사용한 전염병 확산 시뮬레이션: SIR 및 SEIR 모델

~에 의해 Olaoluwa Afolabi7m2023/10/13
Read on Terminal Reader

너무 오래; 읽다

Python을 사용하여 전염병 모델링을 탐구해 보세요. SIR 및 SEIR 모델의 강력한 기능을 알아보고, Python 코드로 실제 시나리오를 탐색하고, 역학적 통찰력을 위한 기술을 확장하는 방법을 알아보세요. 공중 보건에서 질병 모델링을 마스터하기 위해 꼭 읽어야 할 책입니다.
featured image - Python을 사용한 전염병 확산 시뮬레이션: SIR 및 SEIR 모델
Olaoluwa Afolabi HackerNoon profile picture
0-item


고지 사항 : 이 문서는 제공된 코드가 수학적 모델링의 모든 측면에 대한 보편적인 솔루션이 아니라는 점을 명확히 하는 것을 목표로 합니다. 대신, 수학적 모델링 프로세스의 특정 단계를 강조하고 설명 목적으로 Python을 사용하여 이 분야에 대한 인식을 높이는 교육 도구 역할을 합니다.


또한, 생물수학 분야와 같은 수학적 모델 프로젝트를 제출/제안할 때 취해야 할 구체적인 조치가 있다는 점을 기억하는 것도 중요합니다.


이러한 단계에는 문제 정의, 모델 접근 방식 선택(이 기사에서는 두 가지 모델이 논의됨), 방정식 공식화, 매개변수 추정(종종 과거 데이터를 기반으로 함), 미분 방정식을 분석적으로 해결하여 수치 시뮬레이션 구현 또는 이에 국한되지 않습니다. Python 및 MATLAB과 같은 계산 도구, 검증 및 민감도 분석, 시나리오 테스트, 결과 해석 등을 사용합니다.


앞서 말했듯이 이는 수학적 모델링 프로세스의 특정 단계와 설명 목적으로 Python을 사용하는 것을 강조할 뿐입니다.


콘텐츠 개요

  1. 소개
    • 시뮬레이션의 목적
  2. SIR 모델
    • 그것이 하는 일 / SIR Python 코드 시뮬레이션 예제
    • 당신이 배울 수 있는 것
      • 질병 확산 이해
      • 매개변수 감도 살펴보기
      • 개입 평가
  3. SEIR 모델
    • 그것이 하는 일 / SEIR Python 코드 시뮬레이션 예
    • 당신이 배울 수 있는 것
      • 모델 잠복기
      • 조기 개입 평가
      • 복잡한 발병 연구
  4. 결론



1. 소개

전염병은 수세기 동안 인류 역사 전반에 걸쳐 존재해왔기 때문에 전염병이 어떻게 확산되는지 이해하는 것은 대중의 건강을 유지하는 데 필수적입니다. 질병 확산의 역학을 시뮬레이션하고 이해하기 위한 강력한 도구는 수학적 모델입니다. 이 기사에서는 SIR (Susceptible-Infectious-Recovered) 및 SEIR (Susceptible-Exposed-Infectious-Recovered) 모델을 Python을 사용하여 시뮬레이션하는 방법과 함께 논의합니다.


시뮬레이션의 목적

공중 보건 전문가와 역학자에게 시뮬레이션은 수정구슬과 같습니다. 이를 통해 우리는 다양한 상황과 치료 옵션에서 질병의 잠재적 확산을 예측할 수 있습니다. 이러한 모델은 의사 결정, 효과적인 자원 할당 및 다양한 기술의 잠재적 효과에 대한 이해를 돕습니다. 즉, 두 가지 기본 모델을 살펴보겠습니다. SIR 모델 및 SEIR 모델.


2. SIR 모델

그것이 하는 일 / SIR Python 코드 시뮬레이션 예제

SIR(감수성, 감염성, 회복자) 모델은 인구를 이 세 가지 범주로 구분합니다. 전송률( β ) 및 복구 속도( γ )와 같은 변수를 기반으로 이러한 구획이 시간에 따라 어떻게 변하는지 시뮬레이션합니다.


Python을 사용하여 시뮬레이션을 예시하기 전에 수학적 모델 작업 시 "모델 가정"을 만드는 것이 필요합니다.


우리의 가정에서는 LaTeX 공식이나 코드를 사용하여 모델을 생성할 것입니다:


 \begin{align*} \frac{dS}{dt} &= -\beta \cdot S \cdot I \\ \frac{dI}{dt} &= \beta \cdot S \cdot I - \gamma \cdot I \\ \frac{dR}{dt} &= \gamma \cdot I \end{align*}


참고: Python을 사용하여 이 공식을 라텍스화할 수 있습니다. 예는 https://github.com/google/latexify_py/blob/main/examples/examples.ipynb 에서 찾을 수 있습니다.


이 기사에서는 LaTeX를 적절한 수학적 표기법/방정식으로 변환하기 위해 Python 코드를 작성하지는 않지만 아래에서 눈에 띄게 공식/방정식 가정을 볼 수 있도록 https://latexeditor.lagrida.com/ 과 같은 온라인 편집기를 사용했습니다. :



그림 1: 모델 방정식


여기서 :


  • S는 취약한 개인을 나타내며,
  • 저는 감염된 개인을 대표합니다.
  • R은 회복된 개인을 나타냅니다.


매개변수 β와 γ는 각각 전송 속도와 복구 속도를 결정합니다. 음의 부호(즉 -β)는 취약한 개체(S)의 수가 시간이 지남에 따라 감소함을 나타냅니다. 점 표기법은 "곱셈"을 나타냅니다.


요약하면, 이 방정식은 SIR 모델의 역학을 설명합니다. 즉, 질병에 감염될수록 취약한 사람의 수가 감소하고(예: dS/dt), 감염자의 수는 새로운 감염으로 인해 증가하고 회복됨에 따라 감소합니다( dI/dt), 질병이 치료됨에 따라 회복된 사람의 수가 증가합니다(dR/dt). 각 구획의 변화는 해당 성분의 곱셈에 따라 달라지므로 곱셈을 나타내기 위해 점(.)을 사용합니다.


모든 가정이 설정되었으므로 SIR 모델용 Python을 사용하여 시뮬레이션을 실행한 다음 역학을 시각화할 수 있습니다.


 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SIR model equations def SIR_model(y, t, beta, gamma): S, I, R = y dSdt = -beta * S * I dIdt = beta * S * I - gamma * I dRdt = gamma * I return [dSdt, dIdt, dRdt] """ Initial conditions (such as S0, I0, and R0) are not to be random but I hardcoded them with specific values. These choices are typically made based on the characteristics of the disease being modeled and the context of the simulation. Initial condition are set such that S0 = 99%, which indicates the proportion of susceptible individuals when the simulation starts. I0 is set to 1%, which indicates proportion of infected individuals to be 1% when the simulation starts. R0 is set to 0% which is expected that there are are no recovered individuals when the simulations start. """ S0 = 0.99 I0 = 0.01 R0 = 0.00 y0 = [S0, I0, R0] # Parameters # β (beta) is transmission rate and I chose 30%. γ (gamma) is set to 1% beta = 0.3 gamma = 0.1 # Time vector t = np.linspace(0, 200, 200) # Simulate for 200 days # Solve the SIR model equations using odeint() solution = odeint(SIR_model, y0, t, args=(beta, gamma)) # Extract results S, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SIR Model Simulation') plt.legend() plt.grid(True) plt.show()


scipy.integrate.odescipy.integrate.odeint 의 차이점에 대해 더 자세히 이해할 수 있도록 odeintode를 알려드리고 싶습니다.


당신이 발견할 수 있는 것


Python에서 SIR 모델을 실행하면 다음을 수행할 수 있습니다.

  • 질병 확산 이해 : 전염병 곡선을 관찰하고 질병이 지역 사회를 통해 어떻게 확산되는지 시각화합니다. 위의 Python SIR 모델을 실행하면 아래 그래프에서 결과/결과를 볼 수 있습니다.



높은 회복률과 함께 감수성 및 감염률이 감소한 시뮬레이션 결과입니다.



  • 매개변수 민감도 탐색: 다양한 베타 및 감마 값을 테스트하여 이들이 발병 기간과 최대치에 어떤 영향을 미치는지 관찰해 보세요.


  • 중재 평가: 매개변수를 변경하면 다음과 같은 중재 결과를 시뮬레이션할 수 있습니다.

    사회적 고립 또는 예방접종.


3. SEIR 모델

그것이 하는 일 / SEIR Python 코드 시뮬레이션 예

"노출된" 구획을 추가함으로써 SEIR 모델은 SIR 모델을 확장합니다. 이는 사람들이 노출되었지만 아직 전염되지 않은 잠복기 기간을 고려합니다. Python에서 이를 에뮬레이트하는 방법은 여기에 나와 있습니다.


 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SEIR model equations def SEIR_model(y, t, beta, sigma, gamma): S, E, I, R = y dSdt = -beta * S * I dEdt = beta * S * I - sigma * E dIdt = sigma * E - gamma * I dRdt = gamma * I return [dSdt, dEdt, dIdt, dRdt] # Initial conditions S0 = 0.99 E0 = 0.01 I0 = 0.00 R0 = 0.00 y0 = [S0, E0, I0, R0] # Parameters beta = 0.3 sigma = 0.1 gamma = 0.05 # Time vector t = np.linspace(0, 200, 200) # Solve the SEIR model equations solution = odeint(SEIR_model, y0, t, args=(beta, sigma, gamma)) # Extract results S, E, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, E, label='Exposed') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SEIR Model Simulation') plt.legend() plt.grid(True) plt.show()


이 경우의 유일한 차이점은 다양한 시나리오를 탐색하고 "노출된" 기간이 있는 전염병의 역학을 이해하기 위해 latent period rate (σ) 을 도입한 것입니다. 이는 개인이 감염되기 전의 잠복기를 어떻게 설명하는지 보여줍니다.


당신이 배울 수 있는 것


Python을 사용하여 SEIR 모델을 실행하면 다음을 수행할 수 있습니다.


  • 모델 잠복기

    즉시 감염되는 질병과 잠복기가 있는 질병의 행동 차이를 인식합니다.


  • 조기 개입 평가

    격리 및 조기 발견 전략의 효과를 분석합니다.


  • 복잡한 발병 연구

    노출된 사람이 전파의 주요 요인인 COVID-19와 같은 질병의 경우 SEIR을 사용하세요.



4. 결론

SciPy와 같은 Python의 단순성과 강력한 라이브러리는 Python을 질병 모델링을 위한 완벽한 언어로 만듭니다. 그리고 이러한 시뮬레이션을 수행함으로써 전염병의 역학에 대해 더 많이 배울 수 있습니다. 이를 통해 충분한 정보를 바탕으로 결정을 내리고 실제 세계에서 전염병을 평가하는 능력을 향상시키는 데 도움이 되는 판결과 기량을 갖추게 될 수 있습니다.


SIR 및 SEIR 모델 이후에는 훨씬 더 많은 모델이 출시될 예정입니다. 그 밖에도 SEIRS(Susceptible-Exposed-Infectious-Removed-Susceptible) 모델, 공간 모델, 네트워크 모델 등 복잡한 모델이 있습니다. 복잡한 모델뿐만 아니라 지리공간 데이터, 역학 데이터, 행동 데이터 등 실제 데이터도 조사합니다. 등을 검토하고 예방접종 전략, 치료 가능성, 사회적 거리두기 조치 등 개입의 효과를 주의 깊게 검토하면 모델링 능력이 더욱 발전할 것입니다.


이러한 모델링 도구에 대한 지식은 전염병 전파를 이해하는 것이 필수적인 미래에 공중 보건을 보호하는 데 큰 영향을 미칠 수 있습니다.


이미 너무 길었지만 Python을 사용하여 수학적 모델에서 SIR 및 SEIR 모델을 시뮬레이션하는 방법을 보여줄 수 있었으면 좋겠습니다.