On the journey of

[자진프] 노인 대상 복지사업 입지 선정 프로젝트 돌아보기 본문

학교 프로그램/자기주도진로프로젝트(23-2)

[자진프] 노인 대상 복지사업 입지 선정 프로젝트 돌아보기

dlrpskdi 2023. 12. 21. 13:57

이번 학기(7학기) 이론 전공과는 별개로 진행했던 자기주도진로프로젝트(3학점) ! 사실 프로젝트 경험 자체가 모자라다기보다는, 잔여학점을 봤을 때 남은 것들이 이론 focused 과목뿐이라 실습과목을 넣고 싶었다. 그리고 마땅한 과목이 없어서 어쩌지 하던 차에 발견해서, 8월 초에 바로 사람 모아서 시작했음 ! 얼레벌레 시작한 것치고 나중엔 욕심이 생겨서 뭘 많이 했는 데다, 파이널 발표 때는 정말 오랜만에 태블로도 만져보고, 지도-대시보드 시각화에 가벼운 수상까지 해서 기록해보고자 한다 :)

 


프로젝트 계획

 

현재는 나까지 3명이지만, 원래는 개발 직군 팀원 한 분이 더 계셨다! 그러다 해외 이슈로 인해 빠지시게 되면서 정했던 주제를 좀 바꿔야겠다는 필요성을 느꼈다(사실 이때 그냥 엎을까도 고민함).

그리고 결국 변경한 주제가, 현재 주제 : 

'(대학생 대상) 천원의 아침밥 사업'을 노인 대상으로 진행하기에 최적인 입지(센터)를 선정해보자. 

 

 

입지선정 어때요? 로 시작해, 고령화 속도는 가속화되고, 그만큼 고령인구 비율이 늘어나고 있는 상황에서 노인빈곤율이 OECD 상위권에 속한다는 점, 생계형 범죄의 발생 등을 합쳐보자는 제안에 위와 같은 주제가 결정되었다. 

당시 다쳐가지고 회의 두번인가 빠졌는데 그 사이에 결단 내려주신 팀원분들께 감사를....

 

 

데이터 수집 및 결정, OUTLINE

 

서울시 내의 공공(?)센터(노인복지센터, 주민센터 등 모두 포함해서) 크롤링을 한번 시도했었다. 그러나 데이터가 원하는 데이터가 아니고, 공익적인 성격의 주제에 비해 현실성이 떨어진다고 판단해서 결과적으로는 큰 틀을 먼저 짜기로 했다. 그리하여 완성된 타임라인은 아래와 같다. 

 

  1.  서울시 자치구를 먼저 선정한 다음, 각 자치구에서 행정동을 선정하자. 
    1.  서울시 자치구 25개 구 중 좀 잘 사는 동네는 덜 필요할 거고, 좀 못 사는 동네는 더 필요할 거다. 이를 구분짓자.
    2. 어떻게? 군집분석을 한 다음 군집에 따라 행정동 수를 다르게 배정하자. 
  2. 행정동을 선별할 때는, 점수를 매기자. 
    1. 어떻게 점수를 매길까? 어떤 변수를 사용해서 어떻게 점수를 매길지 결정해야 한다.
    2. 공공데이터에서 얻을 수 있는 변수를 사용하되, VIF(다중공선성) 및 독립성 등 기본적인 검정을 거쳐야 한다. 
    3. 검정 후 사용해도 괜찮다 싶다면 회귀식(점수 매길 식)을 산출해 보자. 어떻게? AHP 분석을 활용해보자(구글링했는데 자료가 많진 않았다)

 

10월 말쯤 중간 미팅을 진행하면서 얻었던 피드백이다. 교수님께서는 '공공성을 띤 주제'는 좋지만, 현실적으로 보면 그냥 땅값 싼 곳 중 하나에 하지 않겠냐면서, 우리 주제와 타임라인의 '논리성'을 부여할 것을 강조하셨다. 이런 논리성을 부여하기 위해, 우리는 아래와 같은 (좀 날것이지만 ㅎ) 논리성을 부여했는데, 이때 Y로 둘 만한 변수 찾는 게 꽤 어려웠다. 

고령화가 빠르게 진행되고 있음 - 그러면서 저체중률 문제가 심각해지고 있음 - 원인은 다양하지만, 공익 차원에서 고령인구 대상 천원의 아침밥을 시행해볼 수 있을 것 - 우리 프로젝트는 그래서 의미가 있다

사실 아예 갈아엎을까도 했는데, 시간이 많이 부족해서 원래 사용하려던 변수 중 지하철역 개수 등 1/3 정도 삭제하고, 새로운 변수(저체중률)를 추가한 것이다.


변수는 최종적으로 

1. 데이터 전처리 및 회귀분석

 

대상을 25개 자치구(서울시)로 정한 후, 변수 선정 및 군집분석을 진행했다. 군집분석을 위한 데이터셋은

    • 자치구별 평균소득을 도출하되, 외국인 데이터는 제거/ 남,녀 구분하지 않고 하나로 합친 인구 수로 계산해 도출했다.
    • 자치구당 노인주거복지시설 및 재가노인복지시설 수를 '시설 개수'로 합쳤다. 
    • 이미 운영되고 있는 무료급식소 개수를 불러와, 각 자치구당 하나의 값을 가질 수 있도록 처리했다. 

최종적으로 (자치구|노인인구 수|평균소득|기존 무료급식소 수|시설 수) * 25개 구인 데이터셋을 완성했다. 


 

  • 군집분석도 두 method를 실행했는데, 결과적으로는 K-means를 선택하게 됐고 elbow point를 통해 3개로 나눠야겠다! 하여 3개 군집으로 나누게 됐다. 
    • 계층적 군집분석: 모든 관측치가 자신만의 군집에서 시작하여 유사한 데이터 두 개를 하나의 군집으로 묶고, 이를 모든 데이터가 하나의 군집으로 묶일 때까지 반복
    • K-means 클러스터링 : 학습 데이터셋에서 k개의 중심점 임의 지정한 후,  관측치들을 가장 가까운 중심점에 할당한 후, 이런 할당 결과를 바탕으로 새로운 중심점(이 더 변화가 없을 때까지)을 지정하는 과정을 반복

어쨌든 군집분석을 진행한 결과는 아래와 같다. 

  • (군집분석을 통한 자치구 구분) :  
    • Group 1) 노인 인구 수가 많고, 소득이 낮은 그룹 (17개 구 : 나머지..)
    • Group 2) 노인 인구 수가 적고, 소득이 평균(보통) 정도인 그룹 (5개 구 : 종로 중구 용산 성동 광진)
    • Group 3) 노인 인구 수가 평균~많고, 소득이 많은 그룹(3개 구 : 강남 서초 송파) 
  • (각 자치구별 행정동) :
    •  Group 1은 4개, Group 2,3은 3개 행정동을 정했다. 10을 비례배분할까 하다가, 5개 구와 3개 구가 차이가 크진 않을 것 같아 임의로 4,3,3으로 결정했는데 이런 가중치를 정하는 방법이 있다면 좀더 정확할 것 같기도?)
    • 어쨌든 총 4x17 + 3x5 + 3x3 = 92개 (100개로 맞춰 4,3,3을 조정할까도 싶었는데, 더 이상 여기서 지체할 시간이 없어서 그냥 넘겼다)

다중공선성 발견 - 해결

 

 

그리고 이 단계에서, 상술한 논리를 적용하기 위해 변수를 변경하게 됐다. 바로 위에서 작성한 것은 군집분석용으로만 남기고, 새로운 통계와 변수를 불러왔다. 고령인구 수만 유지하고, 독거노인 수, 기초생활 수급자 인원, 노년부양비, 노령화 지수 등 4개 변수를 추가해 총 5개 변수를 가지고 (신규 설치할) 무료급식소 개수를 군집별로 예측하기로 하였는데 ...

 

VIF(다중공선성) 검사 결과가 Max.40을 찍었다
최대치가 40인거고... 10 미만이어야 하는데 10 미만인 변수가 그룹당 1개뿐이었다

 

이런 문제가 발생하면서 VIF 해결을 하게 됐다.

 

  • Solution 1) scaling : Min-Max Scaler과 Standard Scaler을 각각 적용해 범위를 통일했고
  • Solution 2) Column drop 그럼에도 해결되지 않았던 VIF 문제는... (기존) 무료급식소 개수 변수를 제거해서 해결했다.

그렇게 해결하고(Max.9였다....! 감격) 뒤로 넘어갈 수 있었다. 

 맨 처음 정한 행정동 명단에서 각 동별 점수 도출하기

 

이 점수를 매기기 위해 VIF까지의 새로운 변수 선정 과정을 거쳤던 것. 

그러나 어떻게 점수를 매기지?에서 (어떤 변수를 쓰자)까지는 됐는데 (변수당 가중치)는 정하지 않았기에 이 가중치를 결정할 방법이 있어야 했다. 그래서 구글링 좀 하다가, AHP 분석(계층분석법)을 발견해 이를 진행하기로 했다!

 

AHP 분석은 보통 9점 점수체계를 쓰는데, 우리는 그 정도 규모는 아니라 5점으로 조정해 1/3 , 1/2 , 1 , 2 , 3 이렇게 점수를 매기고, 설문조사를 약 27명 정도의 노인시설 관계자분들을 대상으로 진행했다.

팀 프로젝트이자 학점인정되는 과목이기에 참고는 하셔도 그대로 쓰시지는 않았으면 합니다 :)

 

 

📌여기는 조금 아쉬운 점이, 시간없음(당시 시험기간인가 그랬고) + 아는 사람이 별로 없음(대학생들이 노인시설 관계자를 알 일이 뭐 얼마나 있을까) 콤보로 인해 가족, 지인찬스, 과거 봉사했던 곳에 부탁하기 등등으로 모은 결과였다...

📌좀더 시간을 갖고, 더 많은 모집단을 모아볼 수 있었다면 좋았을 것 같다 (,,) 

 

설문조사 결과를 도출하면, 이제 프로세스가 4단계로 나뉜다. Python으로 진행하면 그냥 함수 써서 데이터프레임에 추가하면 되는 방식이라 개인적으로는 엑셀보다 편했다 :)  

1)쌍대비교행렬을 작성하고,

2)각 컬럼의 합을 1로 맞춰준 후(=표준화)

3)각 행의 기하평균을 계산한 다음 1)에 기하평균 행을 추가. 

- 3)까지의 결과를 가지고 가중치를 계산할 수 있다(Python 기준)

#dtype 변경
survey = survey.astype('float') #dtype 확인 후 float라면 굳이 안 거쳐도 됨
#각 컬럼의 기하평균을 계산해 리스트에 저장
geo_mean_list = []
for i in survey:
    geo_mean_list.append(gmean(survey[i]))
    
# 기하평균 출력
print('기하평균 (Geometric mean)\n')
for i,j in zip(survey, geo_mean_list):
    #print('{} : {}'.format(i, j))
    print('{} : {}'.format(i, round(j,3)))  # 소수점 3 자리수    
    
    
# 데이터프레임에 기하평균값 추가
survey = survey.append(pd.Series(geo_mean_list, index=survey.columns),ignore_index=True)
# 각 컬럼의 가중치를 계산하여 리스트에 저장
geo_mean_sum = sum(geo_mean_list)
weight_list = []
for i in range(colums_cnt):
    weight_list.append(geo_mean_list[i]/geo_mean_sum)
    
    
# 가중치 출력
print('가중치 (Weights)')
for i,j in zip(survey, weight_list):
    print('{} : {}'.format(i, j))
    #print('{} : {}'.format(i, round(j,3)))  # 소수점 3 자리수
    
    
# 가중치 합 확인
su_ = sum(list(weight_list))
print(su_) #0.99999...(무한소수) =1로 계산 가능

 

이건 github에도 공개되어 있다 :)

 

4)응답의 일관성(분석의 합리성: 이 분석을 믿어도 되는가?) 검증 

: 0.1 이하의 CR(일관성비율)이 나오면 된다. 계산 과정은 아래와 같다. 

: 우리는 CR 0.07 정도가 나와서, 본 과정이 합리적이라는 결론과 함께 도출된 식으로 점수를 매겼다. 이때, 단순히 (+)로 계산한 게 아니라 종속변수(신설 무료급식소 개수)와 (기존 무료급식소 개수)는 반비례해야 한다고 판단했고, 

Y = 0.167*(기초생활수급자인원)+0.185 * (고령자 수)+0.216* (노년부양비) + 0.265*(노령화지수) - 0.167*(무료급식소)

 

최종적으로 위와 같은 점수 산출식이 완성됐다. 이를 기반으로 총 92개 행정동의 점수를 매겼다. 

 

서비스화 + 현실성을 섞어서 좀더 User-friendly하게 구현

 

그러나 단순히 명단을 보여주는 것보다는, tableau 대시보드를 활용해 정보를 제공하고, 위에서 결정된 행정동에서 실제로 사업을 진행한다면 새로운 건물 등을 짓는 것보다는 이미 있는 시설에서 진행하는 것이 현실적이므로 , 

  • 아파트 단지 내(보통 아파트 주민들만 허락된 경우가 많아서) 시설이 아니고,
  • 유료가 아닌 공공시설로 무료여야 하고,
  • 낙후되지 않은, 좁더라도 어느 정도 규모의 인원은 수용이 가능한 시설

을 네이버지도,카카오맵에서 cross checking하면서 기록했다. 군집 구분 없이, 해당 시설들의 위,경도값과 도로명주소를 모두 기록해 하나의 xlsx 파일로 제작해 태블로 input 으로 넣어 시각화했다. 대충 아래와 같은 식으로!

그리고 이를 대시보드에 적용했다. 아래는 개수 조정 전 시설 목록으로 서비스 화면녹화 후, 자막을 달아둔 영상이다. 

 

https://youtu.be/dsh8Gxz8gIM

틈새 채널 홍보가 되는 것인가..

우리가 아무리 현실성을 반영하고, 논리성을 부여했다 해도 분석 상의 허점은 있을 수밖에 없고(행정동 선정 개수라던가, 설문조사 결과 / 최신 데이터도 아니다(2021,2년). 그 외 발견하지 못한 허점이 있을 수밖에 없다. 모두가 입지선정은 처음이었으니까) , 땅값이라던가, 기금 마련 방법, 장소 선정 후 운영 방법, 인건비 등등의 문제 등 정말 금전적으로, 현실적으로 맞닥뜨린 문제들도 있다. 때문에 본 분석의 의의는 (개개인의 역량 외에) 

  1. 수요가 크고, '최대 인구'가 '최대 혜택'을 받을 수 있는 장소 및 순서는 대략적으로 파악할 수 있다
  2. 해당 행정동에서 만약 시행한다면 (어느 정도 기반이 된다는 전제 하에), 어디서 해야겠구나! 알 수 있다는 점

정도일 것 같다. 더 나아가 논의와 더불어, 정책으로도 확장이 가능하다는 점도 꼽을 만하다. 이런 공공성을 조금은 인정받아 어제(12/20 최종성과공유회) 장려상이지만 수상도 한 게 아닐까? 


여튼 이렇게 한 학기, 7전공을 마무리하며 포스팅을 마친다 :)