본문 바로가기
공대생/공대생이 바라본 세상

수학으로 이루어진 감염병 모델, SIR

by 흔한 공대생 2020. 4. 17.
728x90
반응형

본 포스팅에서는 감염병 모델 SIR에 대해 다룬다.


 

최근 가장 큰 이슈인 COVID-19.

 기본적으로 이 사태의 원인은 작은 바이러스의 전파다. 이 결과로 발생하는 병을 감염병이라고 하는데, 전 세계적으로 감염병이 어떻게 진행될 것인가에 대한 연구가 진행되고 있다. 그 중 아주 기본적인 생각에서 비롯된 모델로 SIR 모델이 있는데, 이번 포스팅에서는 SIR 모델에 대해 다루어보고자 한다.


 

SIR 모델이란?

 우선 이름의 유래에 대해 알아보자. 세 단어의 앞글자를 따온 것으로, 세 개의 단어는 다음과 같다.

 

  Susceptible: 감염 가능성이 있는 개인, 감염가능군

  Infectious: 병원체 수준이 높아져 감염력이 있는 숙주가 된 개인, 숙주군

  Recovered: 회복되어 감염력이 사라진 개인, 회복군

 

 즉, 사람들을 감염가능군, 숙주군, 회복군으로 나누어 각 군의 개체 수가 어떻게 증감하는지 예측하는 모델이다.

 

 

SIR 모델의 형성 과정

 예측을 하는 방법은 간단하다. 아주 기본적인 부분부터 논리적으로 접근해보자.

 

  1. 감염이 되기 위해서는 감염가능자(S, 감염가능군)와 감염자(I, 숙주군)가 만나야 한다.
  2. 감염자가 많을수록 감염자가 다른 사람과 만날 확률이 높다.
  3. 즉, 감염자 증가 속도는 감염자 수와 비례한다.

 위 사실을 가지고 식을 세워보면 다음과 같이 간단한 미분방정식이 나온다. 변수분리를 이용하여 방정식을 풀어보면 시간에 따른 감염자 수를 구할 수 있다. 이때 y는 감염자 수, β는 감염율, t는 시간이다.

 

$\frac{dy}{dt}\ =\ \beta y$

$\int _{\ }^{\ }\frac{dy}{y}\ =\ \int _{\ }^{\ }\beta dt$

$y\ =\ Ae^{\beta t}$

 

 이렇게 감염자 수는 시간에 따라 지수적으로 증가함을 알 수 있다. 하지만 위 식대로라면 첫 확진자가 나온 후 며칠 지나지 않아 지구 전체가 감염될 것이다. 이는 현실과는 차이가 있다.

 


 

 ​위에서 빠트린 점이 있다. 감염자가 증가하면 감염가능자가 줄어든다는 점이다. 이 점을 고려하여 다시 식을 세워보면 다음과 같다.

 

$\frac{dy}{dt}\ =\ \beta y\left(\frac{N-y}{N}\right)$

 

 이때 N은 전체 인구 수로, 원래 식에다 감염자가 만난 사람이 감염가능자일 확률을 곱해준 것이다. 위 미분방정식은 베르누이 미분방정식이라고 알려진 꼴이므로, 다음과 같이 해를 구할 수 있다.

 

$y"\left(t\right)\ =\ \beta y\left(t\right)-\frac{\beta }{N}y\left(t\right)^2$

$y\left(t\right)\ =\ \frac{N}{1-e^{-\left(\beta t+cN\right)}}$

 

 이때 c는 함수 y의 초기값 y(0)에 따라 결정되는 상수다. 이 결과 역시 감염자 수의 수렴값이 인구 수 전체이기 때문에 현실과는 차이가 있다.

 


 

 마지막으로 감염자 중 회복이 이루어져 바이러스에 면역이 생긴 집단(R, 회복군)을 고려해보자.

 S는 감염가능군의 분율, I는 숙주군의 분율, R은 회복군의 분율, β는 감염률, γ는 회복률이다.

 

$\frac{dS}{dt}=-\beta SI$

$\frac{dI}{dt}=\beta SI-\gamma I$

$\frac{dR}{dt}=\gamma I$

 

 위의 세 미분방정식을 연립하여 시간에 따른 각 군의 개체 수를 구할 수 있다.

하지만 본인은 아직 미분방정식에 대해 깊이 있는 공부를 하지 않았기 때문에 식을 풀 수는 없다.

 

 대신 파이썬을 이용하여 그래프를 그려보겠다. '미분=순간변화율' 이라는 사실을 이용하여 정확하지는 않지만 대략적인 추이를 구할 수 있다. 사용한 방법은 파이썬을 이용하여 매 순간 각 군의 개체 수 분율을 구하고, 이를 엑셀로 옮겨 그래프를 그리는 방법이다. 소스코드와 그래프는 다음과 같다.

# 엑셀을 조작하고 저장하기 위한 import
import os
import openpyxl

# 엑셀을 만들고 행 제목 설정
wb = openpyxl.Workbook()
ws = wb.active
ws['A1'] = '시간'
ws['B1'] = 'S (감염가능군)'
ws['C1'] = 'I (감염군)'
ws['D1'] = 'R (회복군)'

# 상수 설정
b = 0.70   # 감염률
y = 0.14   # 회복률
ra = 0.005  # 시간 단위

# 각 군 별 개체 수 저장할 리스트
D = [[0.999, 0.001, 0]]   # 초기값 저장
ws.append([0, 0.999, 0.001, 0])   # 엑셀에 표시

# 10000번 반복하며 데이터 생성
for i in range(10000):
    dS = b*D[i][0]*D[i][1]
    dR = y*D[i][1]

    S = D[i][0] - dS * ra
    I = D[i][1] + (dS - dR) * ra
    R = D[i][2] + dR * ra

    D.append([S, I, R])
    ws.append([i+1, S, I, R])

# 엑셀 저장
wb.save(str(os.getcwd())+"/"+"result.xlsx")

 

 

 

 위의 결과는 드디어 상식적으로 이해할 수 있는 형태를 가지고 있다.

 지금까지 알아본 것이 SIR 모델의 기본적인 구조다. 잘 따라왔다면 느꼈겠지만, 이 모델을 구축함에 있어서 몇 가지 가정과 논리적 전개, 수학만이 쓰였을 뿐이다. 사회적인 변수나 의학적인 요소는 고려하지 않았다. 하지만 실제로, 논문 몇 개만 찾아보아도 전 세계적으로 이러한 모델을 이용하여 감염병에 대한 연구를 수행하고 있다는 것을 알 수 있을 것이다. 새삼 느끼는 수학의 위대함이다.


 

SIR 모델의 응용

 위에서 다룬 SIR 모델은 정말 이상적인 상황에서 구축한 모델이다. 실제 사회에서는 감염병에 의한 사망, 자연사, 출생, 잠복기, 바이러스 변형에 의한 재감염 등 다양한 요소를 고려해야한다. 이제부터는 몇 개의 요소를 고려한 모델을 소개하고자 한다.

 

 먼저 출생과 사망을 고려한 모델이다. 출생율을 v, 자연사율을 μ, 감염으로 사망할 확률을 ρ라고 하자. 미분방정식은 다음과 같다.

 

$\frac{dS}{dt}\ =\ v-\beta SI-\mu S$

$\frac{dI}{dt}\ =\ \beta SI-\frac{\gamma +\mu }{1-\rho }\cdot I$

$\frac{dR}{dt}\ =\ \gamma I-\mu R$

 


 

 다음은 SEIR 모델이다. SIR 모델에 감염은 되었지만 전염력이 없고 증상 발현이 없는 시기, 즉 잠복기를 추가한 모델이다. Exposed를 사용하여 노출군이라고 한다.

 E에서 I로 이동하는 발현률 σ를 추가하여 다음과 같은 미분방정식을 세울 수 있다.

 

$\frac{dS}{dt}\ =\ v-(\beta I+\mu )\cdot S$

$\frac{dE}{dt}\ =\ \beta SI-(\mu +\sigma )\cdot E$

$\frac{dI}{dt}\ =\ \sigma E-(\mu +\gamma )\cdot I$

$\frac{dR}{dt}\ =\ \gamma I-\mu R$

 

 


 

 마지막으로 바이러스 변이에 의한 회복군의 재감염을 고려한 SEIRS 모델이다.

 재감염율을 ε이라 하면 미분방정식은 다음과 같다.

 

$\frac{dS}{dt}\ =\ v-(\beta I+\mu )\cdot S+\epsilon R$

$\frac{dE}{dt}\ =\ \beta SI-(\mu +\sigma )\cdot E$

$\frac{dI}{dt}\ =\ \sigma E-(\mu +\gamma )\cdot I$

$\frac{dR}{dt}\ =\ \gamma I-(\mu +\epsilon )R$

 

 


 이외에도 유전적으로 면역력을 가진 아이의 출생, 전염율과 치사율이 변하는 돌연변이 등 다양한 요소를 적용할 수 있다. 물론 복잡해지겠지만 보다 더 흥미로운 결과를 얻을 수 있을 것이다.


 

마무리

 지금까지 알아본 결과를 우리 실생활에 적용시켜보자. 다음 두 그래프는 전염율이 각각 70%, 30%로 설정하여 SIR 모델을 구현한 결과다.

 

 

 위 결과를 보면 전염율에 따라 감염군 개체 수가 크게 달라지는 것을 확인할 수 있다. 우리는 실생활에서 손을 자주 씻고 기침 예절을 준수하며, 사람들과의 접촉을 피하는 등의 방식으로 전염율을 낮출 수 있다.

 감염병을 이겨내기 위해서는 개인의 역할이 중요하다는 점을 다시 한 번 되새기며, 우리 인류가 하루라도 빨리 COVID-19를 이겨내는 날이 오기를 바란다.

728x90
반응형

댓글