Dementia Personalized Search

Personalized movement prediction and area-budgeted search alerts for dementia missing-person research.

์น˜๋งค ์‹ค์ข…์ž ์ˆ˜์ƒ‰์„ ์œ„ํ•œ ๊ฐœ์ธํ™” ์ด๋™ ์˜ˆ์ธกยท๋ฉด์  ์ œํ•œ ์•Œ๋ฆผ ๊ตฌ์—ญ ์„ ํƒ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ฐ€์ž…์ด๋‚˜ ๋ชจ๋ธ API ์—†์ด ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ์˜คํ”„๋ผ์ธ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

This is an Apache-2.0 code release, not model weights or a diagnostic model. It exposes the verified prediction-related source used in the Doraogil (๋Œ์•„์˜ค๊ธธ) service so researchers and developers can inspect, reuse and improve individual modules without knowing that application. Full production operation requires separately authorized models, RAG sources and map inputs.

Start with a guardian story / ๋ณดํ˜ธ์ž ์„ค๋ช…๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ธฐ

โ€œ๋ณดํ˜ธ์ž๊ฐ€ ์•Œ๋ ค์ค€ ํ‰์†Œ ํ–‰๋™์„, ์ˆ˜์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ด๋™ ๊ฐ€์„ค๊ณผ ์กฐ๊ฑด๋ณ„ ํ–‰๋™ ๊ทœ์น™์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ฝ”๋“œโ€์ž…๋‹ˆ๋‹ค. ์ง€๋„ ์ˆซ์ž๋Š” ๊ทธ ๋’ค์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

ํ•ฉ์„ฑ ๋ณดํ˜ธ์ž ์„ค๋ช…
โ€œ์š”์ฆ˜๋„ ์ง‘ ๊ทผ์ฒ˜ ์‚ฐ์ฑ…๊ณต์›์— ๊ฑฐ์˜ ๋งค์ผ ํ˜ผ์ž ๊ฑธ์–ด๊ฐ€์„ธ์š”. ๋Š˜ ๋‹ค๋‹ˆ๋˜ ๊ธธ์ด์—์š”. ์˜ˆ์ „ ์ž‘์—…์žฅ์€ ์˜ค๋ž˜์ „์— ๊ทธ๋งŒ๋‘์…จ๊ณ  ์š”์ฆ˜์€ ๊ฐ€์ง€ ์•Š์•„์š”. ์ง‘ ๊ทผ์ฒ˜์—์„œ ์งง๊ฒŒ ๊ฑท๊ณ , ์—ฐ์† 12๋ถ„ ๊ฑธ์œผ๋ฉด ๋‹ค๋ฆฌ๊ฐ€ ์•„ํŒŒ ์•‰์•„์„œ 4๋ถ„ ์‰ฌ์–ด์•ผ ํ•ด์š”. ๊ธธ์„ ์žƒ์—ˆ๋‹ค๊ณ  ์•Œ์•„์ฐจ๋ฆฌ๋ฉด ๊ฐ€์กฑ์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ทธ ์ž๋ฆฌ์—์„œ ๊ธฐ๋‹ค๋ ธ์–ด์š”. ์ œ๊ฐ€ ๋ฐ๋ฆฌ๋Ÿฌ ๊ฐ”์–ด์š”. ์–ด๋А ์‹œ์žฅ์ด๋“  ์‹œ๋„๋Ÿฌ์šฐ๋ฉด ๋ฉ€์–ด์ง€์…จ๊ณ , ์กฐ์šฉํ•  ๋•Œ ๋ฐ˜์‘์€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์š”.โ€

์˜ˆ์ œ์˜ ๊ฒ€์ฆ ๋ฒ”์œ„: ์œ„ ๋ฌธ์žฅ๊ณผ ์•„๋ž˜ ์˜๋ฏธ ํ•ด์„์€ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์ง์ ‘ ์ž‘์„ฑํ•œ ํ•ฉ์„ฑ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. K-EXAONE์„ ์ƒˆ๋กœ ํ˜ธ์ถœํ•ด ๋ฐ›์€ ์‘๋‹ต์ด ์•„๋‹™๋‹ˆ๋‹ค. ์•„๋ž˜ ์ˆซ์ž ๋ณ€ํ™˜ยท๊ทœ์น™ ์ปดํŒŒ์ผยท7๊ฐœ ์ƒํ™ฉ์˜ ๊ทœ์น™ ํŒ์ • ๊ฒฐ๊ณผ๋Š” ๊ณต๊ฐœ๋œ ์‹ค์ œ ์ฝ”๋“œ๋กœ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ˜ธ์ž ๋ฌธ์žฅ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ƒˆ ํ•ด์„์ด ์ƒ์„ฑ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

English: This walkthrough connects an authored caregiver story to authored semantic interpretations, then to real deterministic compiler outputs. It makes zero model calls. It does not claim that the model generated these interpretations, that they are clinically validated, or that this offline script runs the full service.

1. ์›๋ฌธ โ†’ ์˜๋ฏธ ํ•ด์„ โ†’ ์‹คํ–‰ ์ž…๋ ฅ

๋ณดํ˜ธ์ž ๊ทผ๊ฑฐ ์˜๋ฏธ ํ•ด์„ ์˜ˆ์‹œ: K-EXAONE์ด ๋‹ด๋‹นํ•˜๋Š” ๋‹จ๊ณ„ ์ฝ”๋“œ์— ๋ฐ˜์˜๋˜๋Š” ์ž…๋ ฅ
โ€œ์š”์ฆ˜๋„ ๊ณต์›์— ๊ฑฐ์˜ ๋งค์ผ ํ˜ผ์ž, ๋Š˜ ๋‹ค๋‹ˆ๋˜ ๊ธธโ€ habitual_visit, routine_independent ๊ณต์›์˜ ๋Œ๋ฆผ ๊ฐ€์ค‘์น˜, ๊ฒฝ๋กœ ์ต์ˆ™ํ•จ, ๋ชฉ์ ์ง€ ํƒ์ƒ‰ ์ „๋žต ๋น„์œจ
โ€œ์˜ˆ์ „ ์ž‘์—…์žฅ์€ ์š”์ฆ˜ ๊ฐ€์ง€ ์•Š์Œโ€ historical_only; ๊ฒฝ๋กœ ๊ฒฝํ—˜์€ unknown ์ง€๊ธˆ์˜ ๋ฐ˜๋ณต ๋ชฉ์ ์ง€๋กœ ์Šน๊ฒฉํ•˜์ง€ ์•Š์Œ. ํ›„๋ณด ์žฅ์†Œ์—์„œ ์ž๋™ ์‚ญ์ œ๋˜๋Š” ๋œป์€ ์•„๋‹˜
โ€œ์ง‘ ๊ทผ์ฒ˜ ์งง๊ฒŒ ๊ฑท๊ณ , 12๋ถ„ ํ›„ 4๋ถ„ ํœด์‹โ€ ๋ณดํ–‰ ๋Šฅ๋ ฅ B + ์กฐ๊ฑด๋ถ€ rest ์ด๋™ ๋Šฅ๋ ฅยท๊ฑฐ๋ฆฌ ๋ถ„ํฌ ๋ณด์ • + ๋ณดํ–‰ ์ค‘ 12๋ถ„์— ๋„๋‹ฌํ•˜๋ฉด 4๋ถ„ ํœด์‹ ๊ทœ์น™
โ€œ๊ธธ ์žƒ์Œ์„ ์ธ์ง€ํ•˜๋ฉด ๊ฐ€์กฑ ์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐโ€ ์กฐ๊ฑด๋ถ€ wait lost_awareness and not family_present; ๊ฐ€์กฑ ๋„์ฐฉ ์‹œ ์ด ๋Œ€๊ธฐ ๊ทœ์น™ ํ•ด์ œ
โ€œ์ œ๊ฐ€ ๋ฐ๋ฆฌ๋Ÿฌ ๊ฐ”์–ด์š”โ€ ์ด๋™ ์ฃผ์ฒด๋Š” ๋ณดํ˜ธ์ž ๋Œ€์ƒ์ž๊ฐ€ ๊ฐ€์กฑ์—๊ฒŒ ๊ฑธ์–ด๊ฐ€๋Š” seek ๊ทœ์น™์„ ๋งŒ๋“ค์ง€ ์•Š์Œ
โ€œ์‹œ๋„๋Ÿฌ์šด ์‹œ์žฅ์„ ํ”ผํ•จ; ์กฐ์šฉํ•  ๋•Œ๋Š” ๋ชจ๋ฆ„โ€ ์กฐ๊ฑด๋ถ€ ์‹œ์žฅ ํšŒํ”ผ, ์กฐ์šฉํ•  ๋•Œ unknown ์‹œ์žฅ ๊ทผ์ฒ˜์—์„œ ์†Œ์Œ์ด ์ฐธ์ผ ๋•Œ ํšŒํ”ผ. ์‹œ์žฅ ์œ„์น˜๋งŒ์œผ๋กœ ์†Œ์Œ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š์Œ

์›๋ฌธ์€ ์งˆ๋ฌธยท๋‹ต๋ณ€๊ณผ N0~`N4` ๊ทผ๊ฑฐ ID๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ์˜๋ฏธยท์กฐ๊ฑด์„ ํ•ด์„ํ•˜๊ณ , ์ฝ”๋“œ๋Š” ํ—ˆ์šฉ๋œ ํ•„๋“œ๋ฅผ ๊ฒ€์ฆํ•ด ์ˆ˜์น˜์™€ ์‹คํ–‰ ๊ทœ์น™์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žฅ์—์„œ ํ‚ค์›Œ๋“œ๋งŒ ์ฐพ์•„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •ํ•˜๋Š” ์˜ˆ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์›๋ฌธยท์˜๋ฏธ ๊ณ„์•ฝ ์ „์ฒด๋Š” guardian_input.json์— ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๊ฐœ์ธํ™” ํŒŒ๋ผ๋ฏธํ„ฐ: ์‹ค์ œ ์ฝ”๋“œ์˜ ์ „ํ›„ ๊ฒฐ๊ณผ

์ด ์˜ˆ์ œ์˜ ์‹œ์ž‘ ๋ถ„ํฌ๋Š” ์„ค๋ช…์šฉ์œผ๋กœ ์ง์ ‘ ์ง€์ •ํ•œ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. SAR LoRA ์‹ค์‘๋‹ต์ด๋‚˜ ๋…ผ๋ฌธ์—์„œ ์ถ”์ถœํ•œ ์ˆ˜์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์šด์˜์—์„œ๋Š” SAR ์ดˆ๊ธฐ ์ˆ˜์น˜์™€ ์ €์žฅ๋œ ๊ฐœ์ธ ํ•ด์„์ด ์ด ๋‹จ๊ณ„์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค๋ช…์šฉ ์ดˆ๊ธฐ๊ฐ’ ๊ฐœ์ธ ํ•ด์„ ์ ์šฉ ํ›„ ์‹ค์ œ ์ถœ๋ ฅ ๋œป
landmark_seeking 0.200000 0.333333 ๋ฐ˜๋ณต ๋ชฉ์ ์ง€ ๊ทผ๊ฑฐ๋กœ ๋ชฉ์ ์ง€ ํƒ์ƒ‰ ๋น„์ค‘์„ ๋†’์ด๊ณ  ์ „์ฒด ์ „๋žต์„ ์žฌ์ •๊ทœํ™”
random_walk 0.250000 0.208333 ์ „์ฒด ์ „๋žต์„ ์žฌ์ •๊ทœํ™”ํ•œ ๊ฒฐ๊ณผ
route_following 0.150000 0.125000 ๊ฒฝ๋กœ ์ต์ˆ™ํ•จ 0.9์™€ ๋ณ„๊ฐœ์˜ ์ „๋žต ๋ถ„ํฌ; ์ต์ˆ™ํ•จ ์ƒ์Šน์ด ์ด ๋น„์œจ ์ƒ์Šน์„ ๋œปํ•˜์ง€ ์•Š์Œ
direction_keeping 0.100000 0.083333 ๊ฐ™์€ ๋ฐฉํ–ฅ ์œ ์ง€ ๊ด€์ฐฐ์„ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š์Œ
backtracking 0.150000 0.125000 ์žฌ์ •๊ทœํ™” ๊ฒฐ๊ณผ
staying_put 0.150000 0.125000 ์กฐ๊ฑด๋ถ€ ๋Œ€๊ธฐ๋ฅผ ๋ชจ๋“  ์ƒํ™ฉ์˜ ๊ณ ์ • ๋Œ€๊ธฐ ์„ฑํ–ฅ์œผ๋กœ ๋ฐ”๊พธ์ง€ ์•Š์Œ
attraction_weights: ๊ณต์› / ์˜ˆ์ „ ์ž‘์—…์žฅ 0.5 / 0.5 0.6 / 0.4 ํ›„๋ณด ๊ฐ„ ์ƒ๋Œ€ ๋Œ๋ฆผ. ํ•œ ์žฅ์†Œ ๋…์‹์„ ์ œํ•œํ•˜๋Š” ๊ธฐ์กด ์ƒํ•œ ์ ์šฉ
๊ณต์› route_familiarity.score ๋ฏธ์ง€์ • 0.9 ์ต์ˆ™ํ•œ ๊ฒฝ๋กœ์˜ ๋…๋ฆฝ ์ด๋™์ด๋ผ๋Š” ๋“ฑ๊ธ‰์˜ ์ฝ”๋“œ ๋งคํ•‘
mobility_transport_capacity ๋ฏธ์ง€์ • 0.3 ๋ณดํ–‰ ๋“ฑ๊ธ‰ B์˜ ์ฝ”๋“œ ๋งคํ•‘. 30%์˜ ๋ณดํ–‰ ์„ฑ๊ณต๋ฅ ์ด ์•„๋‹˜
radius_lognormal ฮผ=0.0, ฯƒ=0.8 ฮผ=-0.4, ฯƒ=0.8 ์ด ์˜ˆ์ œ ๊ธฐ์ค€ ๊ฑฐ๋ฆฌ ์ค‘์•™๊ฐ’์€ ์•ฝ 0.67032๋ฐฐ. ์ˆ˜์ƒ‰ ๋ฉด์  ์ƒํ•œ๊ณผ ๋‹ค๋ฅธ ๊ฐ’

์ด ์ˆ˜์น˜๋“ค์€ ์—”์ง„์˜ ์ž ์ • ๋ณ€ํ™˜ ๊ทœ์•ฝ์ด๋ฉฐ ์ž„์ƒ ์ ์ˆ˜ยท๋ฐœ๊ฒฌ ํ™•๋ฅ ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ž‘์—…์žฅ 0.4๋„ ์‹ค์ œ ๋ฐฉ๋ฌธ ํ™•๋ฅ  40%๋ผ๋Š” ๋œป์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ถ• ์ฑ„์  ๊ธฐ๋Šฅ OFF์—ฌ๋„ ๊ฐœ์ธ ํ•ด์„์˜ ๋ณดํ–‰ ๋“ฑ๊ธ‰์ด ์ด๋™ ๋Šฅ๋ ฅ ์ž…๋ ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒฝ๋กœ๋Š” ๋‚จ์Šต๋‹ˆ๋‹ค. ๊ทผ๊ฑฐ๊ฐ€ ์—†๋Š” ๋‹ค๋ฅธ ์ถ•์„ ์ƒˆ๋กœ ์ฑ„์ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. ๋งˆ์Œ ํ–‰๋™ ๊ทœ์น™: ์–ธ์ œ ๋ฌด์—‡์„ ์‹คํ–‰ํ•˜๋‚˜

์•„๋ž˜ JSON์€ ํ•ฉ์„ฑ ์˜๋ฏธ ํ•ด์„ ํŒŒ์ผ์˜ authored_mind_interpretation.rules์ž…๋‹ˆ๋‹ค. ์„ค๋ช…์šฉ์œผ๋กœ ์ž‘์„ฑํ•œ ๋ชจ๋ธ ์ถœ๋ ฅ ํ˜•์‹์ด๋ฉฐ, ๋ชจ๋ธ์˜ ์‹ค์ œ ์ƒ์„ฑ ์‘๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

[
  {
    "action": "rest",
    "goal_place": "",
    "applies_only_at": [],
    "condition": "is_walking and continuous_walk_minutes >= 12",
    "hold_minutes": 4,
    "note_ids": [
      "N2"
    ]
  },
  {
    "action": "wait",
    "goal_place": "",
    "applies_only_at": [],
    "condition": "lost_awareness and not family_present",
    "hold_minutes": 0,
    "note_ids": [
      "N3"
    ]
  },
  {
    "action": "avoid_market",
    "goal_place": "",
    "applies_only_at": [],
    "condition": "market.noisy",
    "hold_minutes": 0,
    "note_ids": [
      "N4"
    ]
  }
]

์‹ค์ œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ฅผ when ์กฐ๊ฑด ๋ฐฐ์—ด๊ณผ restยทwaitยทavoid ๋ช…๋ น์œผ๋กœ ๋ฐ”๊พธ๊ณ , ๊ฐ ๊ทœ์น™์— ๊ทผ๊ฑฐ ๋‹ต๋ณ€ ์›๋ฌธ์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. hold_minutes: 0์€ ์ปดํŒŒ์ผ ํ›„ null๋กœ, ์‹œ๊ฐ„ ๋ฏธ์ง€์ •์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. wait๋Š” ๊ฐ€์กฑ ๋„์ฐฉ ๋“ฑ ์กฐ๊ฑด ๋ณ€ํ™”๋กœ ํ•ด์ œ๋˜๋ฉฐ 0๋ถ„ ๋Œ€๊ธฐ๋ผ๋Š” ๋œป์ด ์•„๋‹™๋‹ˆ๋‹ค.

ํ•ฉ์„ฑ ์ƒํ™ฉ: ๋‚˜๋จธ์ง€ ์กฐ๊ฑด์€ ๋น„ํ™œ์„ฑ์œผ๋กœ ์ง€์ • ์‹ค์ œ ๊ทœ์น™ ํŒ์ • ๊ฒฐ๊ณผ
ํ‰์ƒ์‹œ 5๋ถ„ ๋ณดํ–‰ ๋ฐœ๋™ ๊ทœ์น™ ์—†์Œ; ๊ธฐ๋ณธ ๊ฐœ์ธํ™” ๋ณดํ–‰ ์œ ์ง€
๊ณ„์† ๊ฑท๋Š” ์ค‘ 12๋ถ„์— ๋„๋‹ฌ a_0: rest, hold_minutes=4
์ด๋ฏธ ์‰ฌ๋Š” ์ค‘ ์ƒˆ ๋ณดํ–‰ ํœด์‹ ์กฐ๊ฑด์€ ๋น„ํ™œ์„ฑ. ์ง„ํ–‰ ์ค‘์ธ ํœด์‹ ์œ ์ง€ยท์ข…๋ฃŒ๋Š” ๋ณ„๋„ ๋ณดํ–‰ ์‹คํ–‰๊ธฐ๊ฐ€ ๊ด€๋ฆฌ
๊ธธ ์žƒ์Œ ์ธ์ง€ + ๊ฐ€์กฑ ์—†์Œ a_1: wait
๊ธธ ์žƒ์Œ ์ธ์ง€ + ๊ฐ€์กฑ ๋„์ฐฉ ์ด ๋Œ€๊ธฐ ๊ทœ์น™ ๋น„ํ™œ์„ฑ; ๊ด€์ฐฐ๋˜์ง€ ์•Š์€ ํ›„์† ๋ชฉ์ ์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด์ง€ ์•Š์Œ
์‹œ์žฅ ๊ทผ์ฒ˜ + ์†Œ์Œ ๊ด€์ธก ์ฐธ a_2: avoid, feature=market
์‹œ์žฅ ๊ทผ์ฒ˜ + ์†Œ์Œ ๋ฏธํ™•์ธ ํ™•์ • ๋ฐœ๋™ ์—†์Œ, a_2๋Š” ๊ฐ€๋Šฅํ•œ ๊ทœ์น™์œผ๋กœ ๋ณด์กด

์ด ์‹คํ–‰์€ ๊ทœ์น™์˜ ์ปดํŒŒ์ผ๊ณผ ๋ฐœ๋™ ์กฐ๊ฑด ํŒ์ •๊นŒ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 4๋ถ„ ๋™์•ˆ์˜ ์‹ค์ œ ์ž…์ž ๋ณดํ–‰์ด๋‚˜ ์ „์ฒด ๊ฒฝ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ์ด ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์กฐ๊ฑด ๋ฏธํ™•์ธ์€ ๊ฑฐ์ง“๊ณผ ๋‹ค๋ฅด๋ฉฐ, ์ „์ฒด ์—”์ง„์€ ๊ฐ€๋Šฅํ•œ ๋ถ„๊ธฐ์™€ ๊ทธ ๊ฐ€์ค‘ ๊ทœ์•ฝ์„ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๋„์ƒ ์‹œ์žฅ์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ์‹ค์ œ ์†Œ์Œยทํ˜ผ์žก ๊ด€์ธก์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋งˆ์Œ ๊ทœ์น™์€ ์ดํ›„ ๋ณดํ–‰ ์ค‘ ์ฝ”๋“œ๋กœ ํ‰๊ฐ€ํ•˜๋ฉฐ ๋งค ๊ฑธ์Œ ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

4. ์ด ๊ฒฐ๊ณผ๊ฐ€ ์ง€๋„์™€ 30:70์œผ๋กœ ์ด์–ด์ง€๋Š” ์œ„์น˜

๋ณดํ˜ธ์ž ๋ฌธ๋‹ตยท์›๋ฌธ ๊ทผ๊ฑฐ
    โ†“ ์„œ๋น„์Šค์—์„œ๋Š” K-EXAONE ์˜๋ฏธ ํ•ด์„ยท๊ทœ์น™ ์ค€๋น„
    โ†“ ์ด ์˜คํ”„๋ผ์ธ ์˜ˆ์ œ์—์„œ๋Š” ๊ทธ ํ˜•์‹์˜ ํ•ฉ์„ฑ ํ•ด์„์„ ์ง์ ‘ ์ œ๊ณต
SAR ์ดˆ๊ธฐ ์ˆ˜์น˜ + ๊ฐœ์ธ ํ•ด์„ โ†’ ๊ฐœ์ธํ™” ํŒŒ๋ผ๋ฏธํ„ฐ
์กฐ๊ฑด๋ถ€ ๋งˆ์Œ ๊ทœ์น™          โ†’ ๋ณดํ–‰ ์ƒํ™ฉ์— ๋”ฐ๋ผ ํœด์‹ยท๋Œ€๊ธฐยทํšŒํ”ผ
    โ†“ ๋„๋กœยท์‹œ๊ฐ„ยท์‚ฌ๊ฑด ์‹œ์ž‘์ ์ด ์žˆ์–ด์•ผ ๋ณดํ–‰ ์ง€๋„ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ
๊ฐœ์ธํ™” ๋ณดํ–‰ ์ง€๋„ 30% + ๋…๋ฆฝ ๋ฌธํ—Œ ๊ฑฐ๋ฆฌ ์ง€๋„ 70%
    โ†“ ๊ฒฐํ•ฉ ํ™•๋ฅ ์„ ๋ฉด์ ๋‹น ๋ฐ€๋„๋กœ ํ‰๊ฐ€
res9 / ์‹ค์ œ ์•Œ๋ฆผ ๊ตฌ์—ญ ๋ฉด์  ์ตœ๋Œ€ 5.8 kmยฒ

30% ์•ˆ์—๋Š” ๊ฐœ์ธํ™” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋งˆ์Œ ๊ทœ์น™์˜ ์˜ํ–ฅ์ด ํ•จ๊ป˜ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. 70%๋Š” ๊ฐœ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์ง€ ์•Š์€ ๋…๋ฆฝ ๋ฌธํ—Œ ๊ฑฐ๋ฆฌ ์ง€๋„์ž…๋‹ˆ๋‹ค. 30:70์€ ๋‘ ์ง€๋„์˜ ํ˜ผํ•ฉ ๋น„์œจ์ž…๋‹ˆ๋‹ค. ์œ„ ์ „๋žต ๋น„์œจยท์žฅ์†Œ ๋Œ๋ฆผ ๊ฐ€์ค‘์น˜์™€๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ธต์˜ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ๋Š” ๋„๋กœ๋งยทSAR ๊ฐ€์ค‘์น˜ยทK-EXAONE ์„œ๋น„์Šค๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•„๋ž˜ ์ง€๋„ ์˜ˆ์ œ์™€ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐ๋œ E2E ์‹คํ–‰์€ ์•„๋‹™๋‹ˆ๋‹ค. ์•„๋ž˜ ์ง€๋„ ์˜ˆ์ œ์˜ ํ™•๋ฅ  ์ˆซ์ž ์—ญ์‹œ ๋ณ„๋„๋กœ ์ž‘์„ฑํ•œ ํ•ฉ์„ฑ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค.

์ง์ ‘ ์‹คํ–‰ / Run the compiler example

์ €์žฅ์†Œ๋ฅผ ๋‚ด๋ ค๋ฐ›์€ ๋’ค ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Python 3.14 / Pydantic 2.13.4์—์„œ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

python -m pip install -r requirements-guardian-example.txt
python examples/guardian_example.py --check

--check๋Š” ์ €์žฅ๋œ ๊ธฐ๋Œ€ ์ถœ๋ ฅ๊ณผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ์˜ ์ผ์น˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ ํ•ด์„์˜ ์ •ํ™•์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋ชจ๋ธ ์‹คํ˜ธ์ถœ ์˜ˆ์ œ๋กœ ํ™•์žฅํ•˜๋ ค๋ฉด ์ถœ์ฒ˜์™€ ๊ณต๊ฐœ ๊ถŒํ•œ์ด ํ™•์ธ๋œ ๋ชจ๋ธยท๊ฒ€์ƒ‰ ์ž๋ฃŒ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , ์‹ค์ œ ์ž…๋ ฅยท๋ชจ๋ธ ๋ฒ„์ „ยท์‹คํ–‰ ์กฐ๊ฑดยท์ถœ๋ ฅยท์˜ค๋ฅ˜๋ฅผ ๋ณ„๋„๋กœ ๊ธฐ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Next: offline area selection

git clone https://huggingface.co/Damisoda/Dementia-Personalized-Search
cd Dementia-Personalized-Search
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements-example.txt
python examples/offline_selection.py

The example creates an illustrative H3 grid around the public KINTEX study region, combines a toy personal map (30%) and toy background map (70%), and calls the unchanged production area selector with res9 and a 5.8 kmยฒ cap. It prints selected cell count, actual selected area and captured toy probability mass. It performs no API calls, model inference, road download or notification delivery. The toy distributions are for learning the interface; they are not the evaluated SAR/literature priors, real patient data or a performance benchmark. Python 3.14 with the pinned example dependencies was checked in the release environment.

The source files are directly browsable in src/; source-snapshot.zip is an optional frozen download of the same source and example.

Input โ†’ output examples / ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

Synthetic, executable examples of the map-combination and area-selection modules. These inputs are already-computed probability maps, not guardian conversations or actual SAR/K model responses. All example H3 cells are near the public KINTEX study region. No patient data, external calls, model inference or real push delivery is used.

python examples/io_examples.py --check
# Supply the same list-of-cases JSON format for your own offline maps:
python examples/io_examples.py --input examples/io_inputs.json

Input: a small area budget

The tight_budget fixture below uses 0.15 kmยฒ only to make cell exclusion visible. The documented service setting remains 5.8 kmยฒ / res9 / personal 30% + independent literature 70%.

{
  "personal_map": {
    "8930e0b5b13ffff": 0.8,
    "8930e0b5b03ffff": 0.15,
    "8930e0b5b17ffff": 0.05
  },
  "background_map": {
    "8930e0b5b13ffff": 0.1,
    "8930e0b5b03ffff": 0.3,
    "8930e0b5b17ffff": 0.6
  },
  "weights": [
    0.3,
    0.7
  ],
  "target_res": 9,
  "area_cap_km2": 0.15,
  "max_cells": 3
}
Input Meaning
personal_map H3 cell โ†’ probability from personalized walking; toy values here
background_map H3 cell โ†’ independent background probability; toy values, not the actual literature fit
weights [personal, background]; two finite nonnegative values summing to 1
target_res H3 delivery resolution; fixtures use 9 and require input cells at that resolution
area_cap_km2 Upper bound on actual delivery coverage in square kilometres
max_cells Maximum number of selected source cells; a count, not square kilometres

Each map must be nonempty, use valid H3 cells and have finite nonnegative probabilities summing to 1. A cell absent from one map contributes zero from that map. The example wrapper validates this narrow input contract; it is not a documented HTTP endpoint or a replacement for the complete service schemas.

Actual output from the frozen production modules

{
  "status": "ok",
  "combined_map": {
    "8930e0b5b03ffff": 0.255,
    "8930e0b5b13ffff": 0.31,
    "8930e0b5b17ffff": 0.435
  },
  "selected_source_cells": [
    "8930e0b5b17ffff",
    "8930e0b5b13ffff"
  ],
  "delivery_cells": [
    "8930e0b5b13ffff",
    "8930e0b5b17ffff"
  ],
  "area_km2": 0.14423,
  "captured_probability_mass": 0.745,
  "excluded_cells": [
    "8930e0b5b03ffff"
  ]
}

For cell 8930e0b5b13ffff, the mixed probability is 0.3 ร— 0.8 + 0.7 ร— 0.1 = 0.31. The selector ranks probability per square kilometre, accounting for actual cell area. In this fixture, two cells fit in 0.15 kmยฒ and the third is excluded.

Output Meaning
combined_map Normalized 30:70 probability distribution; values rounded to six decimals in this wrapper
selected_source_cells Cells returned by the production selector, in selection order
delivery_cells Sorted union of target-resolution coverage used to calculate the area
area_km2 Actual selected coverage, not the requested maximum
captured_probability_mass Sum of the toy input distribution inside selected cells; not accuracy, recall, a patient-finding rate or calibrated confidence
excluded_cells Candidate cells not in delivery coverage; they receive no eligibility from this example's selection

The production alpha_pool(...) returns a dictionary and select(...) returns a cell list. The JSON object shown above is produced by the teaching wrapper examples/io_examples.py; it is not a model-generated answer. See the exact inputs and all expected outputs.

Four runnable cases

Case Area cap Expected result
normal_budget 5.8 kmยฒ All three toy cells, area 0.216347 kmยฒ, toy mass 1.0; a cap need not be filled
tight_budget 0.15 kmยฒ Two cells, area 0.144230 kmยฒ, toy mass 0.745
zero_budget 0 kmยฒ No selected/delivery cells, area and captured mass 0
invalid_negative_budget -1 kmยฒ ValueError: area budget must be finite and nonnegative

--check reruns the real map combiner and selector and compares every result with the committed output file. Error cases are serialized by the example wrapper; production select raises the exception directly. The examples use six-decimal output rounding and the pinned dependencies in requirements-example.txt.

Larger offline example: actual console output

python examples/offline_selection.py produces:

{
  "example_only": true,
  "not_a_performance_benchmark": true,
  "source_cells": 331,
  "selected_delivery_cells": 80,
  "area_km2": 5.770239942512572,
  "area_cap_km2": 5.8,
  "captured_toy_probability_mass": 0.5340048014828218,
  "model_calls": 0,
  "map_downloads": 0,
  "notifications": 0
}

Tiny last-digit floating-point differences may occur across environments. These are module examples, not the separately evaluated final-system benchmark. Guardian evidence โ†’ K-EXAONE interpretation โ†’ walking requires the external components described below; invented model responses are not presented as tested end-to-end outputs here.

What can I reuse?

Module under src/app/ Role
phase2/combine.py Combine probability maps; the example uses linear pooling
phase3/area_budget.py + geo/h3cover.py Select cells by probability density under actual alert coverage area
phase2/literature_distance.py Independent distance-based background prior
phase0/person_preparation.py + phase2/person_projection.py Preserve personal interpretation and project it into movement parameters
phase0/mind_preparation.py + llm/mind_policy.py Prepare and validate conditional behavior rules
phase2/person_walk.py, phase2/persistent_context_walk.py, phase2/continuous_prediction.py Personalized walking and checkpoint reuse

The snapshot includes 84 source files, including supporting/legacy imports. Presence of a module is not proof it runs in the demonstrated path. See the deployment provenance, source hashes, and demo configuration.

What does 30:70 mean?

In the documented service configuration, SAR generates initial numeric values. Saved K-EXAONE personal interpretation and conditional behavior rules affect the personal walking map (30%). The independent literature-distance map (70%) has no personal parameters. The maps are mixed before selecting alert cells at H3 res9 within 5.8 kmยฒ. These are probability-map mixture weights, not percentages of users, model accuracy, or proportions of code.

Axis scoring is OFF. Prepared behavior rules execute in code while walking; they do not require a model call per particle. Live model failures and unsupported map areas can trigger fallback paths. Full pipeline setup is an integration task; the quick start only demonstrates the reusable selector.

Contribute

See CONTRIBUTING.md. Useful first contributions include documented input contracts, edge-case tests for geographic area accounting, portable offline examples, and clearer uncertainty explanations. Use the Community tab for issues and pull requests. Keep the frozen service source identifiable when proposing improvements.

Evidence and limitations

The source files match the final service snapshot byte-for-byte; adding documentation and this example does not change that engine. This repository does not distribute the SAR adapter, training QA, RAG papers, full road graph or evaluation maps because they have separate publication-rights checks. It does not claim that the entire model-to-walk evaluation can be regenerated from this code-only release.

This is research software, not a dementia diagnosis tool, clinical validation or a guarantee of locating a missing person. Synthetic evaluation is not a real-world recovery rate. Any use involving people requires appropriate validation, lawful data access and operational oversight. Do not upload personal profiles, precise live locations, credentials, or patient records to community issues.

License and origin

Team-owned source, this example and accompanying original documentation are licensed under Apache-2.0. NOTICE retains attribution; dependencies and external data keep their own terms. Model weights and provider services are not covered by the code license. The original deployment is the Come-back-home project, documented here as provenance rather than a requirement to use its service.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support