지진 발생 예측: 머신러닝을 활용한 캘리포니아 지진 실시간 예측 모델 구축
카테고리
데이터 과학/AI
서브카테고리
머신러닝
대상자
- 데이터 과학자 및 머신러닝 엔지니어
- 지질학/지진학 분야 연구자
- 예측 모델 개발자
- 난이도: 중급 이상 (데이터 수집, 특징 공학, 모델 튜닝 기술 필요)
핵심 요약
- 데이터 수집: USGS FDSN API를 통해 M2+ 지진 데이터 수집, ObsPy 라이브러리 사용
- 특징 공학: 지역별/세포별 지진 빈도, b-value, 깊이 분산, 이벤트 간격 변동성 계산
- 모델 튜닝: XGBoost 분류기 사용, SMOTE 기법으로 불균형 데이터 처리, F1-score 최적화
- 배포: joblib으로 모델 저장, 0.3593 임계값 기반 경고 시스템 구축
섹션별 세부 요약
1. 데이터 수집 및 전처리
- 데이터 범위: 1990년부터 현재까지, 32.0°N~42.0°N, -125.0°W~-114.0°W 지역
- API 한도 대응: Chunking 기법으로 1년 단위로 데이터 분할 후 수집
- 저장: CSV 파일로 저장, MIN_EVENTS_PER_CELL=3 기준으로 세포별 특징 계산
2. 특징 공학
- 지역 특징:
- Seismicity Rate (지진 발생 빈도)
- b-value (소형/대형 지진 비율, 하락 시 대형 지진 가능성)
- 깊이 표준편차, 이벤트 간격 CV
- 세포별 특징:
- Local Seismicity Rate, Local b-value, Local 평균 지진 강도
- 슬라이딩 윈도우: 90일 기간, 7일 간격으로 이동
3. 모델 학습 및 튜닝
- 모델 선택: XGBoost Classifier (정확도 및 복잡한 테이블 데이터 처리 능력)
- 불균형 데이터 대응:
- Stratified Splitting (학습/테스트 세트 비율 유지)
- SMOTE (소수 클래스 샘플 생성, k_neighbors 동적 조정)
- 성능 평가:
- F1-score 최적화 (정밀도/재현율 균형)
- ROC-AUC, Confusion Matrix, Precision-Recall Curve 분석
- 특징 중요도: 지역 지진 빈도, 깊이 표준편차, 이벤트 간격 CV, 지역 b-value 상위
4. 모델 배포 및 실시간 예측
- 모델 저장:
```python
joblib.dump(best_model, "earthquake_prediction_model.joblib")
joblib.dump(X.columns.tolist(), "model_feature_columns.joblib")
```
- 예측 스크립트:
- 최신 데이터 수집 (USGS FDSN API)
- 일관된 특징 공학 (NaN 값 대체, 0으로 채우기)
- 임계값 적용: 0.3593 (F1-score 최적값)
- 자동화:
- cron job 또는 Task Scheduler로 일일 실행
- 이메일 알림: smtplib 사용, Large Quake 예측 시 즉시 알림
5. 성능 평가 및 최적화
- Confusion Matrix:
```text
True Positives: 85, False Negatives: 15
False Positives: 20, True Negatives: 385
```
- Precision-Recall Curve: 불균형 데이터에 효과적
- 모델 최적화: GridSearchCV로 하이퍼파라미터 튜닝
결론
- 실무 적용 팁:
- 0.3593 임계값 설정 필수 (F1-score 균형 유지)
- 자동화 배포 (cron job) 및 이메일 알림 시스템 구축 권장
- 특징 공학 일관성 확보 (학습/예측 단계 동일한 처리)
- 핵심 구현 방법: XGBoost + SMOTE + joblib + cron job 통합 활용