-
[프로젝트] 서울시 지역별 한식당 창업 성공 예측 모델 (ML 예측 모델 구현)데이터 분석 공부/회고 2024. 7. 5. 12:33728x90
🍙 한식당, 어디에 창업해야 성공할 수 있을까?
학교 다닐 때부터, 회사를 다닐 때에도, 심지어 학원을 다니는 지금도
"왜 든든한 밥 한 끼 먹을 곳이 마땅치 않을까?" 라는 말을 친구들과 많이 하곤 했는데요.
이번 프로젝트원들과 주제를 고민하며 저녁을 먹을 때에도
한식당이 왜 이렇게 없냐는 얘기를 하다가 한식당 창업 성공 예측 모델을 주제로 선정했습니다.
서울시 행정동별로 어떤 지역에 한식당을 창업하면 성공 확률이 높을지를 예측해 보겠습니다.
Github 주소 : https://github.com/pladata-encore/DE31-2st_team4/tree/main
1. Prologue
1) 데이터셋 소개
- 서울 열린데이터 광장의 서울시 상권분석 데이터
- 행정동별 추정매출, 소득소비, 직장 인구, 상주 인구, 유동 인구, 점포 수, 임대료 데이터셋
2) 분석 목표
- 이 프로젝트는 서울시의 다양한 데이터를 활용하여 한식 전문점의 창업 성공 가능성을 예측하는 머신러닝 모델을 구축하는 것을 목표로 합니다. 이를 통해 예비 창업자들이 보다 합리적인 의사 결정을 할 수 있도록 지원합니다.
- 이러한 분석을 통해 창업자들은 단순히 유행을 좇는 것이 아닌, 데이터에 기반한 신뢰성 있는 사업 계획을 수립할 수 있을 것입니다. 기업은 마케팅 전략을 보다 정교하게 수립하여 지속 가능한 성장을 도모할 수 있습니다.
- 청년 창업자들에게 유용한 아이디어를 제공하고, 지역 경제 활성화와 소비자 만족도 증진에 기여할 수 있을 것입니다.
- 특히, 본 프로젝트는 소비의 흐름 즉, ‘화폐’의 동향을 추적하여 경제의 핵심지표가 되는 소비자에 관한 유의미한 인사이트를 제공하면서, 향후 추가적인 금융 데이터 프로젝트로 발전할 가능성이 크다고 볼 수 있습니다.
2. EDA
1) 이상치, 결측치 확인
- y값 (당월 매출 금액) 의 분산이 너무 크고 이상치가 많음 → 평균보다는 중간값을 기준으로 확인해야겠다고 판단
- y값이 정규 분포와 얼마나 가까운지 확인
2) y값에 영향을 미치는 Feature Importance 확인
a. 변수 간 상관관계 분석 → 매출금액과 상관관계가 높은 피쳐는 유사업종점포수, 개업점포수, 폐업점포수, 당월매출금액, 직장인구 수, 유동인구 수
b. y값과의 상관관계 분석 (랜덤포레스트 모델 돌려서 변수 중요도 확인)
3) 분석에 사용할 컬럼 선택
- 상관관계가 너무 작은 컬럼 제외
- 유사한 컬럼은 묶어서 사용
- 점포수 + 프랜차이즈점포수 = 유사업종점포수 - 다중공선성 확인
- 매출 건수 <> 매출액 깊은 관계 있어 drop
- null 값 처리
- 분석 범위의 데이터로만 필터링 (한식 음식점)
- 데이터 머징 : 행정동별 소득소비, 직장인구, 상주인구, 유동인구, 점포 수, 임대료 데이터셋 merge
4. 모델링
1) 단순선형회귀
- 최소제곱법(OLS)을 활용한 단순 선형 회귀를 1차적으로 수행했음
[ why? ]
- 처음에 데이터셋을 뽑아서 상관관계 파악
- 수치형 데이터로 수치형 데이터(y값)를 예측하려고 하는 문제이기 때문에
- 시계열 데이터이기 때문에 → 선형 관계의 핵심
2) RMSLE(Root Mean Squared Logarithmic Error)
실제 매출액보다 더 크게 예측을 하면 발생할 피해(손실)이 더 악영향을 준다고 판단.
매출액을 실제보다 더 적게 예측하는 건 괜찮을 수 있지만, 더 크게 예측하는 것을 방지하고자 RMSE보다 RMSLE를 사용
매출액의 분포가 왜곡 성향을 가짐
→ 왜곡된 값을 정규 분포 형태로 바꾸는 가장 일반적인 방법인 로그를 적용해서 변환
log 변환 전후 비교 시, 오류 값이 확연히 줄어들었음.
따라서 매출액을 실제보다 더 크게 예측하여 발생하는 손실 문제를 해결할 수 있음.
이 log변환 데이터를 바탕으로 릿지 회귀를 실시함.3) 릿지 회귀
실제 매출액보다 더 크게 예측을 하면 발생할 피해(손실)이 더 악영향을 준다고 판단.
즉, 매출액을 실제보다 더 적게 예측하는 건 괜찮을 수 있지만, 더 크게 예측하는 것을 방지하고자 L2 규제를 사용
릿지 회귀 결과
5. 모델별 / 스케일러별 특징 & 선택 이유1) 배깅 방식 ㅡ 랜덤포레스트
각각의 분류기가 모두 같은 Decision Tree 알고리즘 기반으로, 데이터 샘플링을 다르게 가져가면서 개별적으로 학습을 수행해 보팅을 진행한 결과로 최총 예측 결과를 선정하는 방식
랜덤 포레스트는 앙상블 알고리즘 중 비교적 빠른 수행 속도를 가지고 있으며, 높은 예측 성능을 보이고 있고 쉽고 직관적인 구조를 갖고 있다.
스케일링 방식을 나누어서 진행, 비교해 보았음.
- Standard Scaler : 개별 피처를 평균이 0이고 분산이 1인 값으로 표준화
- MinMax Scaler : 데이터값을 0과 1 사이의 범위 값으로 변환2) 부스팅 방식 ㅡ catboost, xgboost, lightgbm
여러 개의 분류기가 순차적으로 학습을 수행하되, 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서는 올바르게 예측할 수 있도록 다음 분류기에 가중치를 부여하는 알고리즘.
특히 그래디언트 부스트 머신은 가중치 업데이트를 경사 하강법을 이용해 오류식을 최소화하는 방향으로 반복적으로 학습한다는 특징을 가짐
- XGBoost : GBM의 단점인 느린 수행 시간 및 과적합 규제의 부재 문제를 해결해 각광 받는 알고리즘.
- LightGBM : XGBoost 대비해서도 더 빠른 학습과 예측 수행 시간, 메모리 사용량이 더 적음
- Catboost : 처음 데이터셋은 성별/시간대/연령대/요일이 모두 카테고리로 이루어진 범주형 데이터가 대부분이였기 때문에 범주형 데이터 처리에 특화된 모델인 캣부스트를 사용하려 했으나 전처리 및 추가적인 데이터 수집을 통해 수치형 데이터 세트로 통합되어 캣부스트는 다른 부스팅 알고리즘과의 성능 비교를 해 보고자 수행함6. 모델별 성능 설명 및 비교
1) learning curve로 예측 vs 정답값 비교
XGBoost 러닝 커브
2) 하이퍼 파라미터 튜닝
2-1. 랜덤포레스트 ㅡ Grid Search
2-2. 부스팅 방식 ㅡ Optuna / 그리드 서치3. 교차 검증
교차 검증이란 주어진 데이터셋에 학습된 알고리즘이 얼마나 잘 일반화되어있는지 평가하기 위한 방법이며
데이터를 여러 번 반복해서 나누고 여러 번의 모델 학습 및 검증 과정을 거칩니다.
이러한 교차 검증을 활용하여 데이터셋 내의 모든 데이터를 훈련에 사용할 수 있고,
모델의 성능과 정확도를 향상시킬 수 있어 보다 일반화 된 모델을 만드는 것이 가능합니다.
또한 데이터 부족으로 인한 과소적합을 방지할 수 있고 테스트 데이터가 편중되는 것을 방지할 수 있습니다.
1) KfoldK-fold는 먼저 데이터셋을 훈련 세트와 테스트 세트로 나눕니다.
그리고 훈련 세트를 이름과 같이 K개의 폴드 세트로 나누고 이 폴드 세트를 학습용 데이터와 검증용 데이터로 나눕니다.모델은 K-1개를 학습 세트로 사용하고 나머지 하나를 검증 데이터 세트로 설정하여 평가를 진행하는데,
이 때 분리된 K개의 폴드 세트에 대하여 검증 데이터세틀 변경하며 K번의 검증을 수행하고 모델을 학습한 뒤
K번의 평가 결과에 대한 평균을 내어 최종 모델의 성능을 구합니다.
2) cross_val_scorecross_val_score 는 교차 검증을 위해 사이킷런에서 제공하는 함수이며
매개변수로 모델명, 훈련 데이터, 타겟 데이터, cv가 입력되며 여기서 cv는 폴드 수를 의미합니다.
7. 창업 예측 분석1. inverse_transform을 통해 스케일링된 값을 원본 값으로 변환하여 예측 매출액 구하기
2. 행정동별 median값 계산하여 컬럼으로 추가하기
3. a와 b를 비교하여 예측 매출액이 동별 중앙값보다 큰 지 여부에 따라 창업 성공 컬럼에 성공(1)/실패(0) 으로 처리
4. 창업 성공 컬럼의 평균값 계산하여 각 동별 창업 성공률 도출8. 최종 인사이트
1) 예측 매출액을 통한 창업 성공/실패 여부판단
- 모델링 목적 창업 성공 여부를 결정 짓기 위한 매출액의 예측값
- 모델 평가
- 정확도 97%
- y값 매출액 단위 때문에 MSE 값의 단위도 크게 잡힘
- 변수 [창업 성공/실패] 도출 과정
- 행정동별 월 매출액 median 값과 비교하여 창업 성공/실패 여부를 도출했다
- 그러나 창업 성공 여부를 판단하기 위해 매출액만 고려하는 것은 아니라고 생각해서 다른 피쳐들의 영향력을 반영하기 위한 방법을 고민했다
2) <창업 성공예상점수> 방정식
- 점포당_당월평균매출금액(Predicted)에 대한 파생변수들의 상관관계를 분석하여 가중치 설정
- 창업 성공 예상 점수 컬럼 추가하여, 해당 변수 기준으로 시각화
9. 느낀 점해당 데이터셋으로 예측모델 구현을 해 보았는데, 여러 데이터셋과 결합하면
의사결정에 매우 큰 도움이 되는 강력한 예측 모델이 될 수 있겠다는 생각을 했습니다.
머신러닝 모델을 처음으로 직접 구현해 보았는데,
생각보다 모델 선택에 고려해야할 사항도 많고 머신러닝 돌릴 때 파라미터 코딩하는 것도 오류가 많이 나서 어려웠습니다.
또 통계적인 부분에 있어서도 기초가 많이 부족하다는 걸 느꼈습니다.
분석 결과를 해석할 때 어떤 검정 방법을 이용할 것인지, 해석은 어떻게 하는 것이 바람직할 지 등
앞으로 지식과 경험을 쌓아가면서 노하우가 생겨야 될 것 같습니다.
추후에는 사용자로부터 직접 정보값을 입력받아 성공 예측 점수를 출력해주는 서비스로 이어보면 재밌을 것 같습니다!
'데이터 분석 공부 > 회고' 카테고리의 다른 글
플레이데이터 데이터 엔지니어링 31기 14주차 회고 (0) 2024.07.05 [프로젝트] 전력수급현황 데이터 ETL 파이프라인 구축 및 분석 (Hadoop, Spark, Airflow) (0) 2024.07.05 플레이데이터 데이터 엔지니어링 31기 10주차 회고 (0) 2024.06.11 플레이데이터 데이터 엔지니어링 31기 7주차 회고 (0) 2024.05.20 플레이데이터 데이터 엔지니어링 31기 6주차 회고 (0) 2024.05.12 - 서울 열린데이터 광장의 서울시 상권분석 데이터