본 포스팅에서는 감염병 모델 SIR에 대해 다룬다.
최근 가장 큰 이슈인 COVID-19.
기본적으로 이 사태의 원인은 작은 바이러스의 전파다. 이 결과로 발생하는 병을 감염병이라고 하는데, 전 세계적으로 감염병이 어떻게 진행될 것인가에 대한 연구가 진행되고 있다. 그 중 아주 기본적인 생각에서 비롯된 모델로 SIR 모델이 있는데, 이번 포스팅에서는 SIR 모델에 대해 다루어보고자 한다.
SIR 모델이란?
우선 이름의 유래에 대해 알아보자. 세 단어의 앞글자를 따온 것으로, 세 개의 단어는 다음과 같다.
Susceptible: 감염 가능성이 있는 개인, 감염가능군 Infectious: 병원체 수준이 높아져 감염력이 있는 숙주가 된 개인, 숙주군 Recovered: 회복되어 감염력이 사라진 개인, 회복군 |
즉, 사람들을 감염가능군, 숙주군, 회복군으로 나누어 각 군의 개체 수가 어떻게 증감하는지 예측하는 모델이다.
SIR 모델의 형성 과정
예측을 하는 방법은 간단하다. 아주 기본적인 부분부터 논리적으로 접근해보자.
- 감염이 되기 위해서는 감염가능자(S, 감염가능군)와 감염자(I, 숙주군)가 만나야 한다.
- 감염자가 많을수록 감염자가 다른 사람과 만날 확률이 높다.
- 즉, 감염자 증가 속도는 감염자 수와 비례한다.
위 사실을 가지고 식을 세워보면 다음과 같이 간단한 미분방정식이 나온다. 변수분리를 이용하여 방정식을 풀어보면 시간에 따른 감염자 수를 구할 수 있다. 이때 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를 이겨내는 날이 오기를 바란다.
'공대생 > 공대생이 바라본 세상' 카테고리의 다른 글
매트릭스, 행복한 꿈과 불편한 현실 (1) | 2021.02.19 |
---|---|
세상을 좀 먹는 인류, 그리고 바이러스 (0) | 2021.02.17 |
쓸데없는 고찰 (1) 사물과 공간에 관하여 (0) | 2021.01.31 |
촉법소년 제도에 관하여 (0) | 2020.04.27 |
민식이법, 그리고 공대생이 바라본 교통법의 발전방향에 관하여 (0) | 2020.04.15 |
댓글