복약 안내 Android 앱

& Java 기반 ML riskScore 예측

Feature 25 완료 보고

Android App Spring Boot Java ML (Tribuo) Shadow Mode

02 전체 아키텍처

앱 · 시뮬레이션 · ML — 분리되어 있지만 하나의 데이터 흐름으로 연결됩니다

Android 앱
Android App
/api/app/**
AppMedicationLog
AppSelfDiagnosis
AppMedicationSchedule
시뮬레이션
SimulationRun
SelfDiagnosis
MedicationRecord
PolicySnapshot
PolicyVersion
ML 파이프라인
RiskScoreTrainingRow
Tribuo LinearSGD
ModelVersion
MLPrediction
Dashboard / API

03 Android 앱 사용자 흐름

단순 mock이 아닌 실제 백엔드 API와 연동되는 사용자 플로우

사용자 흐름

  • 로그인 → 홈 요약 확인
  • 복약 일정 조회 → 복약 체크
  • 자가진단 입력 → 위험도 확인
  • 처방 · 안내 이력 확인

앱 전용 저장 모델

  • AppMedicationLog — 복약 체크
  • AppSelfDiagnosis — 자가진단
  • AppMedicationSchedule — 복약 일정
  • Hospital — 병원 정보

대표 API

POST /api/users/login
GET  /api/app/users/{code}/summary
GET  /api/app/medication-schedules/{code}
POST /api/app/medication-logs
POST /api/app/self-diagnoses
GET  /api/app/risk-summary/{code}
📱 앱 화면 캡처
assets/app-home.png 교체

04 앱-시뮬레이션 분리 원칙

사용자 입력과 실험 데이터는 저장 모델부터 분리했습니다

구분 앱 데이터 시뮬레이션 데이터
복약 기록 AppMedicationLog MedicationRecord
자가진단 AppSelfDiagnosis SelfDiagnosis
복약 일정 AppMedicationSchedule Prescription 기반
목적 사용자 앱 흐름 실험 · ML 학습
  • 앱은 SimulationRun · simulationKey 같은 내부 개념을 직접 소비하지 않음
  • 앱 판단 로직은 서버에 위치하며 앱 코드에 섞이지 않음
  • 나중에 ML 예측 연결 시 앱 화면 구조 변경 없이 서버 내부만 교체 가능

05 SimulationRun & PolicyVersion

ML 학습 데이터는 실행 상태와 정책 버전 기준으로 엄격하게 분리합니다

SimulationRun 상태

  • RUNNING — 진행 중
  • COMPLETED — 학습 대상 ✓
  • FAILED — 학습 제외

정책 버전 분리

  • RULE_V1_SIMPLE
  • RULE_V2_WEIGHTED_VECTOR
  • 두 정책 데이터는 하나의 학습셋에 혼합 금지

데이터 흐름

SimulationRun (COMPLETED)
PolicySnapshot
RiskScore PolicyVersion 필터
학습 데이터셋

06 Feature 25 — Java ML 파이프라인

학습 · 평가 · 저장 · 조회 — 끊기지 않는 ML 기능 완성

COMPLETED SimulationRun 조회
RiskScoreTrainingRow 생성
Tribuo Dataset 변환
LinearSGD 모델 학습
MAE / RMSE 평가
ModelVersion 저장
MLPrediction 저장

구현 요소

  • Java ML 라이브러리: Tribuo 4.3.1
  • 기본 모델: LinearSGD 회귀
  • 학습 row: RiskScoreTrainingRow
  • 모델 메타: ModelVersion
  • 예측 결과: MLPrediction
Shadow Mode
기존 Rule-Based riskScore는 그대로 유지.
ML 예측 결과는 MLPrediction에 별도 저장.

07 예측 대상 & Feature Schema

현재 riskScore부터 3일 후 riskScore까지 — 3가지 예측 target

PredictionTarget의미
CURRENT_RISK_SCORE 파이프라인 검증용 기준선
NEXT_DAY_RISK_SCORE 다음 날 riskScore 예측
RISK_AFTER_3_DAYS 3일 후 riskScore 예측

핵심 원칙

  • feature는 예측 시점까지 관측 가능한 데이터만 사용
  • 미래 label 값을 feature에 포함하지 않음
  • schema 변경 시 새 FeatureSchemaVersion 정의

RISK_SCORE_FEATURE_V1

그룹Feature
사용자age, weight
질병chronicCount, severityScore
약품activeMedicationCount, targetSystemMatchCount
복약recentAdherenceRate, missedCount7d, lateCount7d
자가진단currentRiskScore, previousRiskScore, diagnosisTrend

08 결과 확인 & 다음 단계

Shadow Mode로 저장 · 비교 — ML 기능을 실험할 수 있는 파이프라인 완성

결과 확인 방법

  • ModelVersion에 MAE / RMSE 저장
  • MLPrediction에 actualRiskScore vs predictedRiskScore
  • /dashboard — ML 파이프라인 탭

대표 API

POST /api/ml/risk-score/train
GET  /api/ml/models
POST /api/ml/models/{id}/predict
GET  /api/ml/predictions/users/{code}
📊 대시보드 ML 탭 캡처
assets/dashboard-ml.png 교체

다음 단계

  • 앱 risk-summary와 ML 예측 연결 검토
  • 운영 화면 고도화 · 모델 모니터링
  • Feature Engineering V2
  • 분류 모델 · 디지털트윈 · 개인화 분석 확장
이 프로젝트의 ML 모델은 실제 의료 판단을 위한 것이 아닙니다.
모의 시뮬레이션 데이터 기반으로 riskScore 예측 파이프라인을 구현하고 Rule-Based 결과와 비교할 수 있게 만든 개발용 MVP입니다.