상세 계산 문서

현재 코드 기준으로
계산 규칙을 자세히 설명합니다

이 문서는 지금 코드에 반영된 규칙만 다룹니다. 표가 어떤 역할로 연결되어 있는지, 어떤 경로가 direct이고 어떤 경로가 estimate인지, 수식이 어떤 변수로 계산되는지까지 구현 기준으로 적습니다.

direct 경로는 해당 subgroup 분포를 공개 표에서 바로 읽은 값입니다.

estimate 경로는 같은 공개통계의 overall 분포와 보정표를 함께 써서 계산한 추정값입니다. 퍼센타일, 기준선, 현재 금액대 인원 모두 같은 규칙을 따릅니다.

먼저 해보는 편이 더 빠릅니다

지금 바로 계산하고, 필요할 때 다시 이 문서로 돌아오세요

상세 문서는 길기 때문에 먼저 결과를 보고 돌아오는 사용자가 많습니다. 계산기 결과에서 이 문서로 돌아왔다가 다시 계산기로 가도 상태가 유지되도록 흐름을 맞췄습니다.

출처 표와 연도 사용 방식

어떤 표가 연결되어 있고, 각 표가 직접 계산인지 추정 보정인지 먼저 분리해서 봅니다.

  • `PAYTIER_SOURCE_CATALOG`는 소득 유형별로 연결된 KOSIS 표 묶음을 관리합니다.
  • 근로소득의 직접 계산 본체 curve와 기준선은 `DT_133N_427`를 사용합니다.
  • 근로소득의 성별·연령 추정 보정치는 `DT_13301N_A423`를 사용합니다.
  • `DT_133001N_4216`는 현재 코드베이스에 연결된 상위 집단 참고 표이지만, percentile 계산 본체에는 직접 들어가지 않습니다.
  • 종합소득의 전체/성별 direct curve는 `DT_133N_3221`를 사용합니다.
  • 종합소득의 나이·성별 보정치는 `DT_133001N_313`를 사용합니다.
  • `DT_133001N_334`는 현재 코드베이스에 연결된 상위 집단 참고 표이지만, percentile 계산 본체에는 직접 들어가지 않습니다.

왜 근로소득과 종합소득을 합치지 않나요

현재 앱은 소득 하나를 고른 뒤 그 기준 안에서만 순위를 계산합니다.

  • 근로소득은 `세전 총급여`, 종합소득은 `종합소득금액` 기준이라 같은 정의의 변수로 바로 더할 수 없습니다.
  • 두 모집단은 서로 배타적이지 않을 수 있어, 개인 단위 중복 제거 정보 없이 단순 합산하면 인원과 분포가 왜곡될 수 있습니다.
  • 그래서 현재 구현은 한 번의 계산에서 `earned` 또는 `comprehensive` dataset 하나만 선택합니다.
  • 총합 소득 순위를 지원하려면 중복 제거가 된 총소득 분포나 결합분포 공식 표가 추가로 필요합니다.

입력 정규화와 범위 검사

사용자가 월 단위로 넣어도 계산 엔진은 항상 연 단위로 맞춘 뒤 같은 규칙으로 처리합니다.

  • `amountType === monthly`이면 `annualAmount = amount * 12`로 환산합니다.
  • `amountType === yearly`이면 입력값을 그대로 사용합니다.
  • 결과 화면에서 월/연 표시만 바뀌고, 내부 계산 기준은 항상 연 단위입니다.
  • 큰 금액도 입력 자체는 허용합니다.
  • 다만 분포표의 마지막 open-ended bucket을 넘어가면, 퍼센타일과 차트는 마지막 tail bucket 기준으로 사실상 포화됩니다.

cohort 선택: direct path와 estimate path

같은 소득이라도 비교 기준에 따라 direct curve를 쓰는지, estimate curve를 만드는지가 먼저 갈립니다.

  • `basis === all`이면 항상 overall curve를 직접 사용합니다.
  • `basis === gender`일 때 direct curve가 있으면 그 곡선을 직접 사용합니다. 현재 이 경로는 종합소득에만 있습니다.
  • 그 외 조합은 adjustment factor를 찾아 overall curve를 스케일한 estimate curve를 사용합니다.
  • estimate path의 `sourceTableIds`는 direct curve 표와 adjustment 표를 합쳐 실제 사용된 표 번호만 남깁니다.

퍼센타일 계산

퍼센타일은 누적 위치를 계산하는 값이고, 현재 금액대 인원과는 계산 대상이 다릅니다.

  • 현재 금액이 속한 bucket을 찾고, bucket 내부는 선형 분포라고 가정해 위치를 보간합니다.
  • `below`는 현재 금액보다 아래에 있다고 본 누적 인원입니다. `cumulativeBelow + bucket.count * fractionBelow`로 계산합니다.
  • `topPercent = ((population - below) / population) * 100` 규칙으로 상위 퍼센트를 계산합니다.
  • 결과는 `0~100`으로 clamp한 뒤 소수점 1자리 퍼센트로 고정합니다.

기준선과 요약 값 계산

중위값, 평균, 상위 10%, 상위 1%는 모두 같은 cohort curve에서 다시 읽어낸 기준선입니다.

  • 중위값은 `interpolateIncomeThreshold(curve, 50)`로 계산합니다.
  • 상위 10% 기준선은 `interpolateIncomeThreshold(curve, 10)`으로 계산합니다.
  • 상위 1% 기준선은 `interpolateIncomeThreshold(curve, 1)`으로 계산합니다.
  • 평균은 curve summary의 `average`를 사용합니다.
  • `nextReference`는 `중위값 -> 평균 -> 상위 10% -> 상위 1%` 순서로 가장 가까운 다음 기준선을 찾고, 상위 1%를 넘기면 `null`을 반환합니다.

추정 계산과 보정계수

estimate 경로에서는 전체 분포를 그대로 복사하지 않고, 평균과 population을 subgroup 방향으로 다시 맞춥니다.

  • estimate path에서는 `scaleCurveSnapshot(overallCurve, factor, population)`으로 전체 곡선을 스케일합니다.
  • 보정계수는 `subgroupAverage / overallAverage`를 사용합니다.
  • 종합소득 age path는 `DT_133001N_313`의 age share를 overall population에 다시 투영합니다.
  • 종합소득 age_gender path는 같은 표의 성별 내부 age share를 남녀 population에 각각 다시 투영합니다.
  • UI의 `60대 이상` 버킷은 종합소득 raw label의 `60세 이상`과 `70세 이상`을 합쳐 사용합니다.

히스토그램 재구성과 밀집도 판정

결과 카드의 차트는 원본 표를 그대로 그린 것이 아니라, 비교하기 쉬운 표시용 bin으로 다시 나눈 값입니다.

  • 원본 KOSIS 표는 비균일 구간이므로 결과 차트는 `2억원 미만은 500만원 균일 bin`, `2억원 이상은 하나의 tail bucket`으로 다시 나눕니다.
  • 각 원본 bucket의 count는 겹치는 bin 폭 비율만큼 재배분합니다.
  • `currentBinDensity`는 현재 bin count를 이웃 bin 평균과 비교해 `high / mid / low`로 판정합니다.
  • 월 보기에서는 같은 bin을 월 기준으로 환산해 label과 tick만 바꿉니다.

결과 해석에서 헷갈리기 쉬운 점

사용자가 가장 자주 혼동하는 값들을 정의 수준에서 분리해 둡니다.

  • `상위 1.3%` 같은 퍼센타일은 누적 순위에 관한 값이고, `30대 남성 중 지금 금액대와 비슷한 사람은 약 1,076명` 같은 값은 현재 500만원 bin에 들어간 추정 인원입니다.
  • 따라서 퍼센타일이 매우 높아도 현재 금액대 인원은 적을 수 있고, 두 값은 서로 모순되지 않습니다.
  • estimate 경로에서는 퍼센타일, 현재 금액대 인원, 기준선 모두 공개통계 기반 추정값입니다. direct 경로처럼 exact observed subgroup count를 의미하지 않습니다.
  • `confidence.sourceTableIds`에는 실제 계산에 사용된 direct table과 adjustment table만 남고, 참고 표는 별도 설명용으로만 남습니다.

현재 코드 기준 direct / estimate 범위

근로소득

전체 기준만 직접 계산합니다.

나이대 기준, 성별 기준, 나이대 + 성별 기준은 공개 통계 기반 추정입니다.

분포 본체와 보정 표가 모두 2024년 자료예요.

종합소득

전체 기준, 성별 기준만 직접 계산합니다.

나이대 기준, 나이대 + 성별 기준은 공개 통계 기반 추정입니다.

분포 본체는 2023년, 세부 보정과 참고 표는 2024년 자료를 함께 써요.

출처 표별 역할

근로소득

2024년 기준 · 세전 총급여 기준
  • 4.2.11 주소지별·과세대상 근로소득 규모별 연말정산 신고 현황

    DT_133N_427 · 2024

    전체 기준 구간 분포와 평균/중위값 계산

    직접 계산
  • 4.2.16 근로소득 분위별 신고현황 및 점유비

    DT_133001N_4216 · 2024

    상위 집단 설명을 위한 참고 표

    참고 표
  • 4.2.3 근로소득 연말정산 신고 현황Ⅲ(성, 연령)

    DT_13301N_A423 · 2024

    성별/연령별 추정 보정치 생성

    추정 보정

종합소득

2023년 기준 · 종합소득금액 기준
  • 3.2.2 성별·종합소득 규모별 주요항목 신고 현황

    DT_133N_3221 · 2023

    전체/성별 기준 분포와 직접 계산

    직접 계산
  • 3.3.4 종합소득세 분위별 신고 현황 및 점유비

    DT_133001N_334 · 2024

    상위 집단 설명을 위한 참고 표

    참고 표
  • 3.1.3 종합소득세 총수입금액에서 납부세액까지 산출 현황Ⅰ(신고유형, 주소지, 성, 연령)

    DT_133001N_313 · 2024

    세부 집단 추정 보정치 생성

    추정 보정

이제 행동 단계입니다

지금 바로 확인하러 가기

상세 계산 문서를 끝까지 읽었다면, 가장 관련 높은 계산기로 바로 넘어가 실제 결과를 보는 흐름이 가장 자연스럽습니다.