개요

  • 직장가입자는 급여의 총 9%(근로자 4.5% + 회사 4.5%)를 국민연금으로 납부
  • 국민연금공단 국민연금 가입 사업자 내역 에서 각 기업이 납부하는 국민연금 총액과 가입자 수, 지역 등을 제공

이를 통해 각 기업에 근로하는 근로자의 평균 연봉을 추정할 수 있고, 지역별 평균연봉을 구할 수 있다

참고 - 근로자의 국민연금 월 최대납부액은 2022.04.23 기준 235,800 원이므로(세전 월급 524만원 이상에 해당) 국민연금을 이용해 급여를 추정하는것이 100% 정확하다고 할 수는 없다.

데이터 전처리

import pandas as pd
import numpy as np
import cufflinks as cf  # 시각화 관련 library
# cufflinks 관련 옵션
cf.go_offline()
cf.set_config_file(offline=False, world_readable=True)

salary = pd.read_csv('./large_data/국민연금공단_국민연금 가입 사업장 내역_20220331.csv',
                   encoding='cp949', low_memory=False)
									 
pay = salary['당월고지금액']/salary['가입자수']
pay = pay * 12 * 100 / 9  # 국민연금 납부액을 통한 연봉추정액
salary['pay'] = pay

가산디지털단지 vs 판교테크노밸리

수도권 it산업단지 중 대표적인 2곳의 평균 연봉을 살펴보자.
개인적인 생각에 판교가산에 비해 기업문화, 회사의 성장가능성 등의 측면에서 우위에 있기 때문에 평균연봉또한 판교가 높을 것이라고 생각되었다.

gasan = salary[salary['사업장도로명상세주소'].str.contains('서울특별시 금천구 가산')]
pangyo = salary[salary['사업장도로명상세주소'].str.contains('경기도 성남시 분당구 판교')]
print(gasan['pay'].mean())  # 35476823.07607453
print(pangyo['pay'].mean())  # 39328922.509835914

단순 기업기준 평균 연봉은 크게 차이가 나지않았다. 하지만 실제 개인별 연봉을 계산하기 위해서는 각 기업의 사원수로 가중치를 부여해 계산해야한다.
예를들어 A라는 지역에 2개의 회사가 있고, 사원수는 각각 1000명, 10명 / 평균 연봉은 각각 5천만원 / 3천만원 일 때, 단순 기업 평균 연봉은 4천만원으로 왜곡된 수치가 도출된다.

def get_mean_salary(df):
    mean_salary = (df['pay']*df['가입자수']).sum() / df['가입자수'].sum()
    return mean_salary

print(get_mean_salary(gasan))  # 37541855.80898015
print(get_mean_salary(pangyo))  # 46036217.2489639

이 결과, 두 지역의 평균연봉 차이는 900만원 정도로 적지않은 차이가 남을 알 수 있다.

지역별 평균연봉

전국 법정동 데이터를 이용해 위 데이터의 지역코드와 결합해 지역별 평균연봉을 계산한다.

상위 10개 지역

## 
address_code = pd.read_csv('data/국토교통부_전국 법정동_20211217.csv', encoding='cp949')
address_code = address_code.fillna('')
address_code['주소'] = address_code[['시도명', '시군구명', '읍면동명', '리명']].agg(' '.join, axis=1)
address_code['주소길이'] = address_code['주소'].str.len()
address_code = address_code.sort_values('주소길이')
address_code['code'] = (address_code['법정동코드'] // 100000).astype(str)
address_code = address_code.drop_duplicates('code', keep='first')[['code', '주소']].reset_index(drop=True)

salary['code'] = salary['고객법정동주소코드'].astype(str).str[:5]
salary['pay_sum'] = salary['pay'] * salary['가입자수']
salary_region = salary.groupby('code').mean()
salary_region['pay_mean'] = salary_region['pay_sum'] / salary_region['가입자수']

salary_top10 = salary_region.sort_values('pay_mean').tail(10)
salary_top10 = salary_top10.reset_index()
salary_top10 = salary_top10.merge(address_code, on='code')
# plotting
salary_top10.iplot(kind='bar', x='주소', y='pay_mean')

평균연봉 상위 10개 지역은 위와 같다. 1,2,3위인 영통구, 동구, 이천시에는 각각 삼성전자, 현대차, SK하이닉스가 있고, 이 때문에 위와같은 결과가 나왔을 것이라고 생각한다.
4위인 나주시와 7위인 당진시 등은 위와같은 대기업이 없는것으로 알고있어, 연봉 상위지역에 위치한 이유를 살펴봤다.

salary[salary['code'] == '46170'].sort_values('가입자수', ascending=False)[['사업장명', 'pay', '가입자수']]  # 나주시

salary[salary['code'] == '44270'].sort_values('가입자수', ascending=False)[['사업장명', 'pay', '가입자수']]  # 당진시

살펴본 결과 나주에는 한전, 농어촌공사 등의 공기업이, 당진에는 현대제철 등 현대 계열사 기업이 위치해있음을 알 수 있었다.

결론

평균 연봉이 높은 지역은 예상대로 대기업이 위치한 곳들이었고, 대기업중에서도 제조기반 대기업이 위치한 경우가 많았다.
데이터를 살펴보기전에 사실 퍈교, 여의도 등 IT, 금융 기업들이 많이 분포한 곳의 평균연봉이 높을것이라고 생각되었는데 실제로는 그렇지 않았다.

물론 실제로 그럴 수도 있겠지만, 필자의 생각에는 국민연금 데이터에는 초고소득자(월급 524만원 이상)의 데이터 집계에 한계가 있어 이런 결과가 나왔다고 생각된다(제조기업 근로자는 대체로 급여를 많이 받지만 IT나 금융기업에 비해 초고소득자는 많이 없기 때문)


그래서 좀더 정확한 분석을 위해서는 단순 국민연금액이 아닌 좀더 정확하게 급여액을 추정할 수 있는 데이터가 요구되며 블라인드, 잡코리아 등 관련 정보를 제공하는 사이트에서 데이터를 추출해 활용하는 방법 등으로 분석에 대한 보완이 가능할 것이다.