발행물

Research Note 006 · 시스템

통근 관측과 인구 이동 보정

LILO의 도시 간 이동 관측은 경제 지표의 통근 신호가 됩니다. 인구 지표는 그와 별개로 건물의 일자리 매력도를 사용합니다. 비슷해 보이는 두 계산이 어디에서 갈라지고, 각각 무엇을 말할 수 있는지 살펴봅니다.

2026.07.16 PLAYCITY Research 24분 읽기

결론부터 말하면, PLAYCITY에는 하나의 통근·인구 이동 모형이 있는 것이 아닙니다. 경제 지표는 LILO에서 관측한 도시 간 순유입을 통근 신호로 사용하고, 건물 기반 추정 인구는 비주거 건물의 일자리 용량으로 별도 재배분합니다. 전자는 사람의 실제 출퇴근을 센 값이 아니고, 후자는 실제 전입과 전출을 추정한 값이 아닙니다.

먼저 알아둘 결론

두 계산은 도시의 낮과 밤을 다르게 표현하려는 공통 목적을 가집니다. 주거 건물이 많은 도시와 업무·활동이 모이는 도시는 같은 모습이 아닐 수 있기 때문입니다. 그러나 입력이 다릅니다. LILO 흐름은 실제 서비스에서 발생한 위치 관측을 집계하고, 인구 재배분은 건물 구성에서 만든 구조적 가정입니다.

현재 운영 중인 두 보정 경로
경로 입력 바꾸는 값 바꾸지 않는 값
경제 통근 보정 LILO 도시 간 유입·유출 업무·이동 활동의 도시별 배분 몫 전체 활동 풀, 공개 인구
인구 이동 보정 건물 기반 인구, 비주거 건물 일자리 용량 도시별 건물 기반 추정 인구 전체 추정 인구 총량

데이터 분석 파이프라인

위치 관측에서 두 보정 경로가 갈라지는 지점

개인별 원시 좌표는 집계 단계 안에서만 사용합니다. 공개 보고서에는 월·분기 단위의 도시 합계와 모형 결과만 남깁니다.

  1. 01 위치·이벤트 수집 LILO 위치 행과 접속 상태 사건을 시간순으로 정렬합니다.
  2. 02 연속 전이 구성 이벤트 경계와 15분 유휴 기준으로 활동 구간을 나누고 인접 관측을 연결합니다.
  3. 03 도시 경계 매칭 출발과 도착이 어떤 도시 폴리곤에 들어가는지 각각 판정합니다.
  4. 04 방향성 흐름 서로 다른 도시만 남기고 일반 이동과 원격 이동 추정을 구분합니다.
  5. 05 경제 통근 계수 순유입률을 포화 함수로 완화해 업무·이동 활동의 상대 배분에 적용합니다.
  6. 06 별도 인구 재배분 LILO 대신 건물 기반 일자리 용량을 12% 섞고 총량을 보존합니다.
공개 grain · raw location → transition → city flow → economy allocation. Population redistribution branches from building-based population and job capacity, not from the flow table.

이 보고서의 기준값은 다음과 같습니다. 흐름과 인구는 2026년 6월 마감값, 경제 통근 계수는 2026년 2분기 스냅샷을 사용합니다.

보고서 기준 스냅샷
도시 흐름2026-06-01 · 41개 도시 경계 · 월간 마감
경제 통근 계수2026 Q2 · 41개 도시 · 도시 흐름 원천 기간 1개
건물 기반 추정 인구2026-06-01 · 460,439명 · 월간 마감
감사 시각2026-07-16 05:11 UTC

도시 간 이동을 어떻게 관측하는가

LILO는 일정한 간격으로 한 사람을 한 번씩 세는 조사가 아닙니다. 서비스가 받은 위치 행의 연속입니다. 같은 이용자가 오래 접속하거나 위치를 자주 보내면 더 많은 행과 전이를 만들 수 있습니다. 그래서 이 보고서는 처음부터 위치 행, 전이, 사람, 통행을 구분합니다.

이동 관측에서 사용하는 단위
단위 그대로 읽으면 안 되는 것
위치 행특정 시각에 수집한 위치 관측 1개이용자 1명, 체류 1회
연속 전이같은 활동 구간의 인접 위치 관측 1쌍목적 통행 1회
도시 간 전이출발·도착이 서로 다른 도시로 매칭된 전이통근자 1명, 실제 교통량
원격 이동 추정두 관측의 직선거리가 12,000블록을 넘은 전이확정된 순간이동

연속 전이를 만드는 조건

위치 행과 join, quit, leave, offline 사건을 이용자별로 시간순 정렬합니다. 사건이 들어오면 새 활동 구간을 시작합니다. 같은 구간 안에서도 두 위치 관측의 간격이 15분을 넘으면 연결하지 않습니다.

delta_t = t[k] - t[k-1]
changed = world[k] != world[k-1] or x[k] != x[k-1] or z[k] != z[k-1]
transition = same_player and same_epoch and changed and 0 < delta_t <= 900,000 ms

다음으로 출발점과 도착점을 도시 경계에 각각 공간 조인합니다. 6월 스냅샷은 41개 도시 모두 map label 경계를 사용했습니다. 여러 경계가 한 점을 덮으면 더 작은 면적의 경계를 먼저 선택합니다. 양 끝이 모두 매칭되고 도시가 서로 다를 때만 도시 간 전이가 됩니다.

matched = from_city != null and to_city != null
cross_city = matched and from_city != to_city
distance = sqrt((to_x - from_x)^2 + (to_z - from_z)^2)
normal = cross_city and distance <= 12,000
remote = cross_city and distance > 12,000

429,009개 전이 중 도시를 넘은 것은 1,108개입니다

2026년 6월에는 위치 행 433,625개에서 연속 위치 전이 429,009개를 만들었습니다. 양 끝이 도시 경계에 매칭된 전이는 375,363개, 87.50%였습니다. 이 가운데 374,255개는 같은 도시 안의 이동이었고 도시를 넘은 전이는 1,108개였습니다.

관측 품질과 분류

도시 경계 매칭과 도시 간 전이 구성

첫 비교의 분모는 연속 위치 전이 429,009개, 두 번째 비교의 분모는 도시 간 전이 1,108개입니다. 서로 다른 분모를 한 축에 섞지 않았습니다.

연속 위치 전이의 도시 경계 매칭

매칭 87.50%
미매칭 12.50%

도시 간 전이의 거리 분류

일반 63.45%
원격 36.55%
Source · BLOCK GIS public city-flow API, 2026-06 closed snapshot. 일반 703개, 원격 405개. 원격 이동은 거리 합계에 포함하지 않습니다.
2026년 6월 전이 단계별 합계
단계건수비율
연속 위치 전이429,009100.000%
도시 경계 양끝 매칭375,36387.495%
같은 도시 안 전이374,25587.237%
도시 간 전이1,1080.258%
경계 미매칭53,64612.505%

도시 간 전이는 128개 방향성 도시쌍과 33개 도시에 나타났습니다. 8개 도시에는 도시 간 전이가 없었습니다. 도시별 유입에서 유출을 뺀 값의 합은 0이고 범위는 -4에서 +3이었습니다. 방향 차이가 작다는 사실은 확인할 수 있지만, 이용자별 중복과 이동 목적을 구분하지 않았으므로 실제 출퇴근 균형으로 해석할 수는 없습니다.

경제 지표의 통근 계수

경제 모형은 도시 간 흐름을 사람 수로 바꾸지 않습니다. 대신 유입과 유출의 방향 차이를 -1에서 +1 사이의 순유입률로 만들고, 업무와 이동 활동을 도시 사이에 나눌 때 작은 가중치로 사용합니다.

inbound_i = sum_j flow[j → i]
outbound_i = sum_j flow[i → j]
movement_i = inbound_i + outbound_i
net_rate_i = (inbound_i - outbound_i) / movement_i
commute_factor_i = clamp(1 + 0.20 * tanh(1.50 * net_rate_i), 0.70, 1.30)

이동 관측이 없으면 순유입률을 0, 계수를 1로 둡니다. tanh를 사용하므로 순유입률이 극단으로 가도 계수 변화가 계속 커지지 않습니다. 현재 상수에서는 이론상 범위가 약 0.819~1.181이라 0.70~1.30 안전 범위에 실제로 닿지는 않습니다.

순유입률에 따른 통근 계수 반응
순유입률통근 계수상태
-1.00.818970유출만 관측된 극단
-0.50.872970유출 우세
0.01.000000균형 또는 관측 없음
+0.51.127030유입 우세
+1.01.181030유입만 관측된 극단

계수는 전체 경제량이 아니라 도시별 몫을 바꿉니다

통근 계수는 업무 기능과 이동 활동의 배분값에 각각 곱해집니다.

urban_allocation_i = urban_score_i × place_scale_i × value_added_factor_i × commute_factor_i
mobility_allocation_i = mobility_score_i × mobility_scale_i × commute_factor_i

이후 도시별 배분값을 전체 활동 풀에 맞게 다시 정규화합니다. 어떤 도시의 계수가 커지면 그 도시의 상대 몫은 늘지만, 통근 계수만으로 전체 활동액이 생기거나 사라지지는 않습니다.

2026 Q2 분포

41개 도시의 통근 계수 방향

막대의 분모는 경제 스냅샷의 41개 도시입니다. 중립 16개에는 유입과 유출이 같은 12개 도시와 이동 관측이 없는 4개 도시가 함께 들어 있습니다.

Source · city_economy_quarterly_formula_v9. 계수 범위 0.928329~1.181030. 분기 결과의 원천 인구월은 2026-07-01이므로 6월 마감 인구 총량과 직접 비교하지 않습니다.

가장 큰 계수 1.181030은 유입 1개, 유출 0개처럼 관측량이 1인 경우에 나왔습니다. 관측이 있는 37개 도시 중 16개는 유입과 유출의 합이 10개 미만이었습니다. 현재 식은 표본이 작은 비율을 자동으로 중립값 쪽으로 줄이지 않습니다. 따라서 계수 범위만 보고 도시의 통근 중심성을 순위화하는 것은 위험합니다.

인구 이동 보정은 건물에서 출발합니다

공개 인구 지표는 LILO 위치 전이를 사용하지 않습니다. 먼저 완공 주거 건물에서 도시별 기본 인구를 만들고, 비주거 건물 수에 유형별 가중치를 곱해 일자리 용량을 만듭니다. 이 일자리 용량은 실제 고용자 수나 건물 연면적이 아니라 모형이 정한 상대 매력도입니다.

건물 한 동에 적용하는 일자리 용량
건물 유형용량건물 유형용량
오피스28산업22
복합20상업18
공공14문화12
기타 비주거4주거0

주거 기반 88%와 일자리 매력도 12%를 섞습니다

도시 i의 기본 인구를 base_i, 일자리 용량을 job_i라고 하겠습니다. 전체 기본 인구와 전체 일자리 용량에서 각 도시가 차지하는 비중을 만든 뒤 88대 12로 혼합합니다.

B = sum_i base_i; A = sum_i job_i
base_share_i = base_i / B; job_share_i = job_i / A
target_share_i = 0.88 × base_share_i + 0.12 × job_share_i
lower_i = 0.85 × base_i; upper_i = 1.15 × base_i
target_i = clamp(B × target_share_i, lower_i, upper_i)

도시별 목표는 기본 인구의 ±15% 안으로 제한합니다. 기본 인구가 0이면 하한과 상한도 0이므로 일자리 건물이 있더라도 이 단계만으로 새 인구가 생기지는 않습니다.

합계를 보존하는 water-filling

각 도시를 따로 제한하면 목표 합계가 원래 총인구와 달라질 수 있습니다. 상·하한에 닿은 도시는 고정하고, 남은 잔차를 아직 움직일 여유가 있는 도시의 headroom 비율로 나눕니다. 잔차가 충분히 작아질 때까지 최대 64회 반복합니다.

residual = B - sum_i target_i
room_i = upper_i - target_i, if residual > 0
room_i = target_i - lower_i, if residual < 0
target_i = target_i + residual × room_i / sum_j room_j

마지막에는 목표값을 모두 내림한 뒤 소수부가 큰 도시부터 1명씩 더합니다. 이 largest remainder 반올림으로 모든 도시의 정수 합계를 재배분 전 총량과 정확히 맞춥니다.

총인구의 1.61%가 도시 사이에 재배분되었습니다

2026년 6월에는 기본 인구와 보정 후 인구가 모두 460,439명이었습니다. 증가량의 합은 7,427명으로 전체의 1.61%입니다. 16개 도시가 증가하고 4개가 감소했으며, 21개는 기본 인구가 0이라 변하지 않았습니다.

모형 보정 결과

도시별 주요 인구 재배분

막대는 기본 인구 대비 변화율을 -15%~+15%의 같은 축에 표시합니다. 오른쪽 숫자는 모형 인구 변화량과 변화율입니다.

Source · population_monthly_close_v2_migration, 2026-06 closed snapshot. 합계는 460,439명으로 보존됩니다. 막대는 변화량이 아니라 변화율 축입니다.

송주시는 기본 인구가 307,781명으로 크지만 현재 일자리 용량은 0이라 6,905명이 다른 도시로 재배분되었습니다. 이것은 실제 일자리가 없다는 뜻이 아닙니다. 현재 일자리 용량이 비주거 건물의 동수만 세기 때문에 대규모 주거도시의 서비스 활동, 재택 활동, 건물 규모를 표현하지 못한다는 뜻입니다.

민감도와 정합성 검증

같은 6월 기본 인구와 일자리 용량을 두고 혼합 강도와 도시별 상한만 바꿔 다시 계산했습니다. 여기서 재배분 인구는 증가량의 합입니다. 총량이 보존되므로 감소량 절댓값의 합과 같습니다.

강도 민감도

일자리 혼합 비중에 따른 재배분 인구

도시별 상한은 ±15%로 고정했습니다. 막대는 0명에서 8,000명까지의 절대 축이며 전체 인구는 모든 경우 460,439명으로 같습니다.

재계산 조건 · 2026-06 base/job capacity, cap ±15%. 12% 이후 증가폭이 둔화되는 이유는 여러 도시가 상한에 닿기 때문입니다.

일자리 비중을 6%에서 12%로 두 배 높이면 재배분 인구는 17.3% 늘지만, 12%에서 24%로 다시 두 배 높이면 5.6%만 늘어납니다. 12%에서 이미 7개 도시가 +15% 상한에 닿기 때문에 강도를 더 키워도 결과로 충분히 전달되지 않습니다.

도시별 이동 상한 민감도 (일자리 비중 12%)
상한재배분 인구증가 / 감소 도시상한 도달
±5%2,76913 / 75
±10%5,15416 / 47
±15%7,42716 / 47
±20%9,31816 / 48

상한을 ±5%에서 ±20%로 넓히면 재배분 인구는 3.37배가 됩니다. 현재 결과는 일자리 비중뿐 아니라 상한 선택에도 크게 의존합니다. 이것은 구현 오류가 아니라 모형 모수의 불확실성입니다.

모든 합계 불변식은 통과했습니다

감사 스크립트의 정합성 검사
검증식현재 결과판정
matched + unmatched = source transitions375,363 + 53,646 = 429,009통과
same city + cross city = matched374,255 + 1,108 = 375,363통과
normal + remote = cross city703 + 405 = 1,108통과
sum(inbound - outbound) = 00통과
통근 계수 수식 재현최대 오차 0.00000048통과
인구 재배분 총량 보존차이 0명통과
운영 인구와 독립 재계산절대 차이 0명통과

일곱 검사가 모두 통과했다는 것은 코드의 식과 저장값이 일치하고 합계가 닫힌다는 뜻입니다. 이동 관측이 실제 통근을 정확히 대표하거나 인구 재배분이 실제 도시 선택을 맞혔다는 뜻은 아닙니다. 내부 정합성과 외적 타당도는 별개의 질문입니다.

한계와 공개 범위

이동 관측의 한계

  • 위치 수집 주기가 일정하지 않으면 활동이 많은 이용자와 긴 세션이 더 많이 반영됩니다.
  • 연속 위치 전이는 이동 목적, 교통수단, 출퇴근 여부를 기록하지 않습니다.
  • 같은 이용자가 같은 경계를 여러 번 넘으면 여러 전이로 계산됩니다.
  • 전이의 12.50%는 출발 또는 도착이 도시 경계에 매칭되지 않았습니다.
  • 도시 간 전이의 36.55%는 12,000블록 초과 원격 이동 추정입니다.
  • world가 바뀐 관측도 전이 후보가 되지만 월간 결과에는 world 차원이 남지 않습니다.

통근 계수의 한계

  • 작은 분모에서는 유입 1, 유출 0만으로 순유입률 +1이 됩니다.
  • 현재 식에는 관측량에 따른 신뢰도 수축이나 최소 표본 기준이 없습니다.
  • 관측이 없는 도시와 유입·유출이 정확히 같은 도시가 모두 중립값 1을 받습니다.
  • 경제 활동의 상대 배분만 바꾸며 실제 고용자나 통근자 수를 추정하지 않습니다.

인구 이동 보정의 한계

  • 일자리 용량은 비주거 건물 수의 가중합이며 연면적, 사업체, 고용자 수가 아닙니다.
  • 기본 인구가 0인 도시는 일자리 용량이 있어도 인구를 배분받지 못합니다.
  • 12% 혼합 강도와 ±15% 상한은 관측에서 추정한 모수가 아닙니다.
  • 총량 보존은 산술적 제약이며 도시별 결과의 현실성을 보증하지 않습니다.
  • LILO 흐름을 사용하지 않으므로 실제 인구 이동 보정이라고 부를 수 없습니다.

쓸 수 있는 것 → 도시 간 위치 전이 비교, 경제 배분의 방향성 보정, 건물 기반 인구 시나리오
쓸 수 없는 것 → 실제 통근자 수, 교통수단별 통행량, 거주지·직장 추론, 전입·전출 인구

개인정보 보호를 위해 개인 식별자, 사용자명, 원시 좌표, 원시 경로는 공개하지 않습니다. 관측량이 작은 도시 흐름에는 도시명을 붙이지 않았습니다. 보고서에 표시한 도시명은 개인 활동이 아니라 건물 기반 합성 인구의 보정 결과에만 사용했습니다.

다음 연구

가장 먼저 필요한 것은 통근 계수가 작은 분모의 극단값을 그대로 받지 않도록 신뢰도를 계산하는 일입니다. 한 가지 후보는 관측량이 적을수록 순유입률을 0에 가깝게 줄이는 경험적 수축입니다.

credibility_i = movement_i / (movement_i + k)
shrunk_net_rate_i = credibility_i × net_rate_i
shrunk_commute_factor_i = 1 + 0.20 × tanh(1.50 × shrunk_net_rate_i)

여기서 k는 임의로 고정하지 않습니다. 월별 데이터를 다시 표본 추출해 도시 순위가 얼마나 안정적인지 확인한 뒤 선택해야 합니다. 일반 이동만 쓴 경우와 원격 이동까지 포함한 경우, 15분 유휴와 12,000블록 기준을 바꾼 경우도 함께 비교합니다.

인구 보정에서는 일자리 비중과 상한의 조합을 매월 같은 방식으로 재계산해 순위와 이동량의 안정성을 추적합니다. 건물 수 기반 용량은 연면적, 사업체 업종, 활동시간과 나란히 검증합니다. 이 과정이 끝나기 전까지 인구 보정값은 사람의 이동이 아니라 건물 구조가 만드는 시나리오로 유지합니다.

후속 보고서는 다음 질문을 다룹니다.

  • 시간대별 왕복 패턴은 출퇴근형 리듬과 얼마나 닮았는가?
  • 같은 이용자의 반복 경계 통과를 세션 단위로 묶으면 도시 순위가 달라지는가?
  • 일자리 용량과 LILO 순유입이 같은 방향을 가리키는 도시 비율은 얼마인가?
  • 두 신호가 충돌할 때 별도의 주간 활동 인구 지표로 분리하는 편이 타당한가?
도시 활동·교류 지표 보기 BLOCK GIS · 새 창 인구 지표 계산 전체 보기 Research Note 004