본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 21. 09:58

월드 모델(World Model)이란 무엇이며, 왜 단순한 예측 그 이상인가?

요약

기존의 의료 AI가 주로 상태를 기반으로 미래를 예측하는 '예측 모델'에 집중했다면, 월드 모델은 특정 행동(Action)이 시스템의 상태 변화에 미치는 영향을 시뮬레이션하는 데 중점을 둡니다. 월드 모델은 상태, 행동, 전이, 목표, 피드백이라는 다섯 가지 핵심 요소를 통해 불확실성 속에서 최적의 의사결정을 내리는 데 필수적인 구조를 제공합니다.

핵심 포인트

  • 예측 모델은 '다음에 무엇이 일어날 것인가'를 묻지만, 월드 모델은 '특정 행동을 취했을 때 무엇이 일어날 것인가'를 묻는다.
  • 월드 모델의 핵심 구성 요소는 상태(State), 행동(Action), 전이(Transition), 목표(Objective), 피드백(Feedback)이다.
  • 의료 분야의 문제는 단순한 분류나 예측을 넘어, 개입(Intervention)과 같은 행동 결정이 필요한 '행동 문제'의 성격을 띤다.
  • 월드 모델은 행동 조건부 전이(Action-conditioned transition)를 통해 시스템의 변화를 시뮬레이션할 수 있다.

오늘날 대부분의 의료 AI 시스템은 여전히 예측 시스템 (prediction systems)으로 설계되어 있습니다. 전형적인 파이프라인은 다음과 같습니다:

data = collect_patient_data ()
features = extract_features ( data )
risk = model . predict ( features )
return risk

이것은 유용할 수 있습니다. 예측 모델 (prediction model)은 다음과 같은 질문에 답할 수 있습니다:
질병의 예상 위험도는 얼마인가? 이미지에 이상 소견이 포함되어 있는가? 이 사람은 어떤 위험군에 속하는가? 미래의 임상적 사건이 발생할 확률은 얼마인가?

하지만 월드 모델 (world model)은 다른 질문을 던집니다. 예측 모델은 다음과 같이 묻습니다:
future = predict ( state )

월드 모델은 다음과 같이 묻습니다:
next_state = simulate_transition ( state , action )

다시 말해:
예측은 '다음에 무엇이 일어날 수 있는가?'를 묻습니다.
월드 모델은 '우리가 특정 행동 (action)을 취한다면 무엇이 일어날 수 있는가?'를 묻습니다.

이 차이는 의학에서 매우 중요합니다. 의학은 단순히 위험을 인식하는 것만이 아닙니다. 불확실성 (uncertainty) 속에서 무엇을 할지 결정하는 것이기도 합니다.

월드 모델의 최소 구조
단순화된 월드 모델은 다섯 가지 객체로 설명할 수 있습니다:

상태 (State): 현재 시스템은 어떤 상태인가?
행동 (Action): 무엇을 할 수 있는가?
전이 (Transition): 행동 후에 시스템이 어떻게 변할 수 있는가?
목표 (Objective): 우리가 나아가고자 하는 방향은 어디인가?
피드백 (Feedback): 행동 후에 무엇을 관찰했는가?

매우 작은 추상화 모델은 다음과 같이 보일 수 있습니다:

class WorldModel :
def observe_state ( self , system ):
pass
def define_action ( self , action_input ):
pass
def simulate_transition ( self , state , action ):
pass
def collect_feedback ( self , system , action ):
pass
def update ( self , state , action , feedback ):
pass

이것은 이미 단순한 예측 모델 (predictive model)과는 다릅니다. 예측 모델은 명시적인 행동 (action) 객체 없이도 작동할 수 있습니다. 하지만 월드 모델은 그럴 수 없습니다. 행동이 없다면, 행동 조건부 전이 (action-conditioned transition)도 존재할 수 없기 때문입니다.

의료 AI에 위험 예측 그 이상이 필요한 이유
많은 의료 AI 시스템은 인식과 예측에 능숙합니다:
이미지 분류 (image classification); 위험 점수 산정 (risk scoring); 질병 탐지 (disease detection); 예후 추정 (prognosis estimation); 이상 탐지 (anomaly detection); 인구 집단 계층화 (population stratification).

하지만 많은 실제 의료 및 건강 관리 문제들은 단순한 분류 문제 (classification problems)가 아닙니다. 그것들은 행동 문제 (action problems)입니다. 예를 들어: 개입 (intervention)을 고려해야 하는가? 어떤 변수를 가장 먼저 모니터링해야 하는가? 어떤 증거 (evidence)가 예상되는 변화를 뒷받침하는가? 어떤 피드백 (feedback)을 수집해야 하는가? 만약 결과가 예상과 다르다면, 무엇을 업데이트해야 하는가? 이것들은 단순한 예측 질문이 아닙니다. 상태 (state), 행동 (action), 전이 (transition), 증거 (evidence), 그리고 피드백 (feedback)에 대해 추론할 수 있는 시스템을 필요로 합니다. 바로 이 지점에서 의료 월드 모델 (medical world model)이라는 개념이 유용해집니다.

예측 모델 (Prediction Model) vs. 의료 월드 모델 (Medical World Model)

예측 모델은 다음과 같은 형태일 수 있습니다:

class PredictionModel:
    def predict_risk(self, patient_data):
        features = self.extract_features(patient_data)
        risk_score = self.model.predict(features)
        return risk_score

이는 데이터를 위험 점수 (risk score)로 매핑합니다. 반면, 의료 월드 모델은 다른 구조가 필요합니다:

class MedicalWorldModel:
    def simulate_transition(self, state, action, evidence):
        if not self.safety_gate(state, action):
            return {
                "status": "blocked",
                "reason": "Safety gate failed. Human review required."
            }
        
        transition = self.transition_model.estimate(
            state=state, 
            action=action, 
            evidence=evidence
        )
        
        return {
            "status": "hypothesis_generated",
            "state": state,
            "action": action,
            "expected_transition": transition,
            "evidence": evidence,
            "disclaimer": "Hypothesis-generating only. Not medical advice."
        }

출력값은 치료 권고 (treatment recommendation)가 아닙니다. 그것은 전이 가설 (transition hypothesis)입니다. 그 차이가 매우 결정적입니다.

상태 (State): 한 사람을 위험 점수로 환원하지 마십시오

위험 점수는 유용할 수 있습니다: { "cardiovascular_risk": 0.23 }
하지만 월드 모델에게 그것만으로는 충분하지 않습니다. 월드 모델은 상태 (state)에 대한 더 풍부한 표현 (representation)이 필요합니다.

예시 스키마: { "subject_id" : "anonymous_001" , "timestamp" : "2026-05-20" , "metabolic_state" : { "fasting_glucose" : 5.6 , "hba1c" : 5.7 , "fasting_insulin" : 12.4 , "triglycerides" : 1.8 }, "inflammation_state" : { "hs_crp" : 2.1 }, "lifestyle_state" : { "sleep_duration" : 6.2 , "weekly_exercise_minutes" : 90 , "diet_pattern" : "high_refined_carbohydrate" }, "risk_context" : { "family_history" : [ "type_2_diabetes" ], "medications" : [], "known_conditions" : [] } } 이것은 임상 표준이 아닌 설명용 스키마일 뿐입니다. 실제 시스템에서는 모든 상태 변수가 출처(source); 단위(unit); 타임스탬프(timestamp); 측정 컨텍스트(measurement context); 결측값 처리(missing-value handling); 데이터 품질 메타데이터(data-quality metadata); 불확실성 주석(uncertainty annotation)을 가져야 합니다. 간단한 Python 표현은 다음과 같을 수 있습니다: from dataclasses import dataclass from typing import Dict , Any , List @dataclass class HealthState : subject_id : str timestamp : str biomarkers : Dict [ str , Any ] lifestyle : Dict [ str , Any ] symptoms : Dict [ str , Any ] medications : List [ str ] context : Dict [ str , Any ] data_quality : Dict [ str , Any ] 의료 월드 모델(medical world model)의 경우, 상태 표현(state representation)은 전처리 세부 사항이 아닙니다. 그것은 기반입니다.

행동: 개입은 계산 가능한 객체(computable objects)가 되어야 합니다. 챗봇에서 개입은 자연어(

예시: { "action_id" : "increase_zone2_exercise" , "type" : "lifestyle" , "target" : "weekly_exercise_minutes" , "change" : { "from" : 90 , "to" : 150 }, "duration" : "12_weeks" , "monitoring" : [ "resting_heart_rate" , "sleep_quality" , "fasting_glucose" ], "safety_notes" : [ "known cardiovascular disease가 있는 경우 임상의 검토 필요" ] } Python 표현: @dataclass class MedicalAction : action_id : str action_type : str target : str parameters : Dict [ str , Any ] duration : str monitoring : List [ str ] safety_notes : List [ str ] 의학 분야에서 개입은 다음과 같을 수 있습니다. 약물 변경; 생활 방식 중재; 모니터링 계획; 영양 전략; 수면 중재; 운동 프로토콜; 추적 검사; 의뢰; 관찰 및 대기 결정. 핵심은 개입이 명시적(explicit)이고, 매개변수화(parameterized)되어 있으며, 시간 제한적(time-bounded)이고, 감사 가능(auditable)해야 한다는 것입니다. 증거: 전이는 증거에 기반해야 한다 (Transitions Should Be Evidence-Bound). 의학 월드 모델은 자유롭게 전이를 환각해서는 안 됩니다. 모든 전이 가설은 증거에 묶여야 합니다. 최소한의 증거 객체: { "evidence_id" : "evidence_001" , "claim" : "매주 유산소 운동을 늘리는 것은 특정 대사 위험군 인구에서 인슐린 민감도를 개선할 수 있다." , "evidence_type" : [ "임상 지침" , "동료 검토 연구" , "기전적 근거" ], "strength" : "보통" , "applicability" : { "population_match" : "부분적" , "condition_match" : "부분적" , "uncertainty" : "개인별 반응이 다를 수 있음" }, "limitations" : [ "맞춤형 치료 예측은 아님" , "안전성 검사 필요" , "효과 크기는 기준선 상태와 준수도에 따라 달라짐" ] } 간단한 증거 빌더: @dataclass class EvidenceItem : evidence_id : str claim : str evidence_type : List [ str ] strength : str applicability : Dict [ str , Any ] limitations : List [ str ] class EvidenceBuilder : def build ( self , state : HealthState , action : MedicalAction ): evidence_items = self.

retrieve_relevant_evidence ( state , action ) filtered = self . filter_by_applicability ( evidence_items , state ) return filtered def retrieve_relevant_evidence ( self , state , action ): # 실제 운영 환경에서는 선별된 지식 베이스 (knowledge bases), # 임상 가이드라인 (clinical guidelines), 체계적 문헌 고찰 (systematic reviews), 또는 신뢰할 수 있는 문헌 인덱스 (literature indexes)를 쿼리해야 합니다. return [] def filter_by_applicability ( self , evidence_items , state ): # 인구 집단 (population), 맥락 (context), 상태 (condition), 안전 경계 (safety boundary), # 측정 품질 (measurement quality), 그리고 불확실성 (uncertainty)에 따라 필터링합니다. return evidence_items 유용한 규칙: 조언을 생성하지 마십시오. 증거에 기반한 전이 가설 (transition hypotheses)을 생성하십시오. 전이 (Transition): 약속이 아닌 가설 (Hypothesis, Not Promise) 의료 월드 모델 (medical world model)에서 전이는 약속으로 프레임화되어서는 안 됩니다. 잘못된 프레임화: 이 개입은 결과를 개선할 것입니다. 더 나은 프레임화: 현재 상태와 증거 제약 조건을 고려할 때, 이 행동은 불확실성을 동반하여 다음과 같은 상태 변화를 일으킬 수 있습니다. 전이 객체 (Transition object): @dataclass class TransitionHypothesis : from_state : HealthState action : MedicalAction expected_changes : Dict [ str , Any ] time_window : str evidence : List [ EvidenceItem ] uncertainty : Dict [ str , Any ] safety_flags : List [ str ] 출력 예시: { "expected_changes" : { "weekly_exercise_minutes" : { "direction" : "increase" , "expected_from" : 90 , "expected_to" : 150 }, "insulin_sensitivity" : { "direction" : "potential_improvement" , "confidence" : "low_to_moderate" }, "fasting_glucose" : { "direction" : "possible_decrease" , "confidence" : "uncertain" } }, "time_window" : "8_to_12_weeks" , "uncertainty" : { "adherence" : "unknown" , "baseline_variability" : "high" , "measurement_noise" : "moderate" }, "safety_flags" : [ "screen cardiovascular risk before increasing exercise intensity" ] } 구현 스케치 (Implementation sketch): class TransitionModel : def estimate ( self , state , action , evidence ): expected_changes = self . estimate_expected_changes ( state = state , action = action , evidence = evidence ) uncertainty = self .

estimate_uncertainty ( state = state , action = action , evidence = evidence ) safety_flags = self . check_safety_flags ( state , action ) return TransitionHypothesis ( from_state = state , action = action , expected_changes = expected_changes , time_window = action . parameters . get ( " time_window " , " unknown " ), evidence = evidence , uncertainty = uncertainty , safety_flags = safety_flags ) 이름이 중요합니다. TreatmentPlan 대신 TransitionHypothesis를 사용해야 합니다. 안전 게이트: 의료 월드 모델은 안전을 최우선으로 해야 합니다. 의료 월드 모델은 모든 행동을 자유롭게 시뮬레이션해서는 안 됩니다. 전이(transition) 시뮬레이션 전에 안전 게이트가 있어야 합니다. class SafetyGate : def check ( self , state : HealthState , action : MedicalAction ): checks = [ self . check_contraindications ( state , action ), self . check_required_human_review ( state , action ), self . check_action_intensity ( state , action ), self . check_data_quality ( state ), ] return all ( checks ) def check_contraindications ( self , state , action ): # 플레이스홀더일 뿐입니다. # 프로덕션 시스템에는 선별된 의료 규칙과 인간의 검토가 필요합니다. return True def check_required_human_review ( self , state , action ): # 일부 행동은 절대 자율적일 수 없습니다. return True def check_action_intensity ( self , state , action ): return True def check_data_quality ( self , state ): return True Then: def simulate_medical_transition ( state , action ): if not safety_gate . check ( state , action ): return { " status " : " blocked " , " reason " : " 안전 게이트 실패. 인간 검토 필요." } evidence = evidence_builder . build ( state , action ) transition = transition_model . estimate ( state , action , evidence ) return transition 유용한 설계 원칙: medical_world_model = safety_first + evidence_bound + feedback_calibrated 피드백: 피드백 없이는 월드 모델이 아닙니다. 월드 모델은 일회성 답변 생성기가 되어서는 안 됩니다.

그것은 다음과 같은 루프(loop)를 지원해야 합니다: 상태 관찰 (Observe state) → 행동 정의 (Define action) → 전이 시뮬레이션 (Simulate transition) → 피드백 수집 (Collect feedback) → 모델 업데이트 (Update model)

의사 코드 (Pseudo-code):

def world_model_loop ( subject , action ):
    state_t0 = observe_state ( subject )
    evidence = build_evidence_chain ( state_t0 , action )
    transition_hypothesis = simulate_transition ( state = state_t0 , action = action , evidence = evidence )
    feedback = collect_feedback ( subject = subject , action = action , time_window = transition_hypothesis . time_window )
    updated_state = update_model ( previous_state = state_t0 , action = action , hypothesis = transition_hypothesis , feedback = feedback )
    return updated_state

피드백 (Feedback)에는 다음 항목들이 포함될 수 있습니다: 반복되는 생체 지표 (biomarkers); 증상 (symptoms); 웨어러블 트렌드 (wearable trends); 복약/이행 기록 (adherence records); 이상 사례 (adverse events); 임상의 검토 (clinician review); 환자 보고 결과 (patient-reported outcomes); 환경적 또는 생활 방식의 변화 (environmental or lifestyle changes).

피드백 객체 (Feedback object):

{
  "feedback_id" : "feedback_001",
  "action_id" : "increase_zone2_exercise",
  "time_window" : "12_weeks",
  "observations" : {
    "weekly_exercise_minutes" : 145,
    "fasting_glucose" : 5.4,
    "sleep_duration" : 6.5,
    "subjective_energy" : "improved"
  },
  "adherence" : "partial",
  "adverse_events" : [],
  "notes" : "Interpret carefully; multiple concurrent changes existed."
}

업데이트 로직 (Update logic):

class FeedbackUpdater :
    def update ( self , previous_state , action , hypothesis , feedback ):
        comparison = self . compare_expected_vs_observed ( expected = hypothesis . expected_changes , observed = feedback [ " observations " ] )
        return { " previous_state " : previous_state

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0