복약도우미

DigitalTwin 기반 복약·위험 예측 시뮬레이션 플랫폼

모의데이터 → 시뮬레이션 → ML 예측 → 개인화 추정 → 처방 후보 비교

1. 문제 제기

복약 관리는 단순 기록 문제가 아니다

질병, 약물, 복약 습관, 증상 변화가 시간에 따라 얽히며 위험도가 달라진다.

핵심 질문

시간이 지나면서 환자의 위험은 어떻게 변하고, 그 변화를 보고 어떤 판단 후보를 만들 수 있을까?

2. 전체 시스템 파이프라인

모의데이터
생성
시뮬레이션
엔진
riskScore
계산
ML
예측
DigitalTwin
개인화
처방 후보
비교

3. 개발 타임라인

timeline
    title 복약도우미 개발 흐름
    기본 데이터 구조 : User / Disease / Medication / SelfDiagnosis
    모의데이터 생성 : 가상 환자와 복약 데이터 생성
    시계열 시뮬레이션 : 시간에 따른 상태 변화
    SimulationRun 정규화 : 실행 조건과 재현성 관리
    ML 예측 파이프라인 : riskScore 미래 예측
    CI/CD와 배포 : 홈랩 서버와 자동화
    DigitalTwin : 가상 페르소나 기반 추정
    Feature 28 : 처방 후보 비교
      

4. 기술 스택

Backend

Spring Boot
서비스 로직과 API

Database

MySQL + Flyway
데이터와 변경 이력 관리

ML

Tribuo
Java 기반 riskScore 예측

Dashboard

HTML / JS
시뮬레이션과 분석 결과 확인

Infra

Docker, Homelab, VPS
외부 접근 가능한 실행 환경

CI/CD

GitHub Actions
테스트와 배포 자동화

5. 핵심 ERD / 관계도

erDiagram
    USER ||--o{ DIGITAL_TWIN : has
    PERSONA_DEFINITION ||--o{ DIGITAL_TWIN : defines
    DIGITAL_TWIN ||--o{ SIMULATION_RUN : runs

    SIMULATION_RUN ||--o{ SELF_DIAGNOSIS : creates
    SIMULATION_RUN ||--o{ MEDICATION_RECORD : creates
    SIMULATION_RUN ||--o{ PRESCRIPTION : creates

    SELF_DIAGNOSIS ||--o{ RISK_SCORE_RECORD : has
    MODEL_VERSION ||--o{ ML_PREDICTION : produces
    SELF_DIAGNOSIS ||--o{ ML_PREDICTION : predicted_for

    DIGITAL_TWIN ||--o{ PERSONA_ESTIMATION : estimated_as
    SIMULATION_RUN ||--o{ PERSONA_ESTIMATION : based_on

    PRESCRIPTION ||--o{ PRESCRIPTION_COMPARISON : baseline
    PRESCRIPTION_COMPARISON ||--o{ PRESCRIPTION_CANDIDATE : compares
      

6. SimulationRun = 재현 가능한 실험 단위

flowchart LR
    SR[SimulationRun] --> Status[status: RUNNING / COMPLETED / FAILED]
    SR --> Param[parameterSnapshot]
    SR --> Policy[PolicySnapshot / PolicyVersion]
    SR --> Data[MedicationRecord / SelfDiagnosis / Prescription]
    SR --> Dataset[ML Dataset Boundary]

    Dataset --> Completed[COMPLETED 실행만 학습 대상]
      

같은 조건으로 다시 실행하고 비교할 수 있어야 정책·모델 변경 효과를 판단할 수 있다.

7. ML 예측과 검증 구조

flowchart LR
    Obs[현재까지 관측 가능한 데이터] --> Feature[Feature Row]
    Feature --> Model[ML Model]
    Model --> Next[다음 날 riskScore]
    Model --> After3[3일 후 riskScore]

    Rule[Rule-Based riskScore] --> Shadow[Shadow Mode 비교]
    Model --> Shadow
    Shadow --> Record[RiskScoreRecord / MLPrediction]
      
No future leakage User-level split Shadow Mode Comparison Mode

8. DigitalTwin과 PersonaEstimation

flowchart LR
    Hidden[숨겨진 PersonaDefinition] --> Twin[DigitalTwin Simulation]
    Twin --> Obs[복약 기록 / 자가진단 / riskScore]
    Obs --> Est[PersonaEstimation]
    Est --> Compare[실제 personaType과 비교]

    Hidden -.추론 feature로 직접 사용하지 않음.- Est
      

DigitalTwin의 핵심은 정답을 처음부터 보여주는 것이 아니라 관측 데이터로 숨겨진 특성을 추정하는 과정이다.

9. Feature 28 Step 1~4

Step 1. RiskScoreRecord

Rule-Based와 ML score를 같은 기준으로 비교

Step 2. PersonaEstimation

DigitalTwin의 숨겨진 특성 추정

Step 3. PrescriptionCandidate

실제 처방과 후보 처방을 분리

Step 4. ML-assisted Candidate

예측과 개인화 추정 기반 처방 후보 비교

10. 30초 데모: 위험 상승 조기 감지

DigitalTwin 상태

Current Risk: 62
ML 3-day Prediction: 78
PersonaEstimation: ELDERLY_FRAIL
Actual after 3 days: 76 ↑

Rule-Based

MAINTAIN

현재 기준선을 넘지 않아 유지 판단

ML-assisted

REINFORCE / WARNING

3일 후 위험 상승, 높은 변동성, 낮은 순응도 추정

ML이 실제 처방을 대체했다는 뜻이 아니라, 기존 판단과 다른 후보를 만들고 그 근거를 비교할 수 있다는 뜻이다.

11. 한계 인식

가능한 것

위험 상승 조기 감지 비교

후보 판단 근거 비교

이후 riskScore 흐름 확인

불가능한 것

실제 치료 효과 단정

실제 처방 대체

임상 검증 주장

12. 운영 회고와 미래 확장

운영 회고

홈랩 배포, Nginx/Cloudflare 보안 강화, GitHub Actions CI/CD, Flyway 도입

복합 장애, 데드락, 단독 통과/전체 실패를 통해 통합 검증의 필요성을 체감

미래 확장

앱 risk-summary와 ML 연결

설명 가능한 예측

OOD 검증

생체·생활 데이터 통합

counterfactual simulation

결론

복약도우미는 가상의 환자 상태를 만들고, 시간에 따른 변화를 시뮬레이션하며, ML로 미래 위험을 예측하고, 디지털트윈 기반 개인화 분석을 통해 기존 처방 판단과 다른 후보를 비교하는 실험 플랫폼이다.