왜 시뮬레이션이 필요할까요?
이전 레슨에서는 dia의 평균과 공분산 행렬을 사용해 다변량 정규 분포를 시뮬레이션했어요. 이제 그 시뮬레이션 결과를 활용해 흥미로운 질문에 답해 보겠습니다!
이런 의문이 생길 수 있어요. 이미 과거 데이터가 있는데 왜 시뮬레이션을 하나요? 관심 있는 질문에 그냥 그 데이터를 사용하면 되지 않나요?
아주 좋은 질문입니다. 몬테카를로 시뮬레이션은 확률분포를 이용해 모델링하며, 이를 통해 과거 데이터처럼 제한된 데이터 포인트 수가 아니라 많은 표본을 바탕으로 전체 확률분포를 살펴볼 수 있게 해줘요.
예를 들어, 시뮬레이션된 당뇨 환자 age 변수의 0.1번째 분위수는 얼마일까? 같은 질문을 할 수 있어요. 이 질문은 과거 데이터 dia만으로는 답할 수 없습니다. 기록이 442개뿐이라서 천번째에 해당하는 값을 계산할 수 없기 때문이죠. 대신 몬테카를로 시뮬레이션 결과를 활용하면 가능합니다. 지금 바로 그렇게 해 볼게요!
당뇨 데이터셋은 DataFrame dia로 로드되어 있으며, 다음 라이브러리가 이미 임포트되어 있습니다: pandas는 pd, numpy는 np, 그리고 scipy.stats는 st.
이 연습은 강의의 일부입니다
Python으로 배우는 Monte Carlo 시뮬레이션
연습 안내
- 시뮬레이션 결과에서
tc변수의 0.1번째 분위수(하위 1,000분위)를 계산하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
cov_dia = dia[["age", "bmi", "bp", "tc", "ldl", "hdl", "tch", "ltg", "glu"]].cov()
mean_dia = dia[["age", "bmi", "bp", "tc", "ldl", "hdl", "tch", "ltg", "glu"]].mean()
simulation_results = st.multivariate_normal.rvs(mean=mean_dia, size=10000, cov=cov_dia)
df_results = pd.DataFrame(simulation_results, columns=["age", "bmi", "bp", "tc", "ldl", "hdl", "tch", "ltg", "glu"])
# Calculate the 0.1st quantile of the tc variable
print(____)