본문으로 바로가기
반응형

지난 개인 프로젝트 EDA, 전처리, 모델링 과정을 뒤로 하고, 드디어 마지막 분석 과정 시간입니다.

다양한 분석 모델링을 시도했지만, 결국 데이터 속에서 정말 유의미한 관계를 발견하는 것에는 어려움이 있었습니다. 하지만 프로젝트를 진행하며 많은 경험을 할 수 있었고, 특히 마지막 분석 과정에서도 다양한 것들을 얻을 수 있었는데요.

 

복잡한 현실 세계에서, 별 세 개가 따당 찍히며, 0.6~0.8 사이의 높은 상관계수와 0.05 아래의 p-value를 얻을 수 있는 상황은 그리 흔하지 않을 것입니다. 이번 프로젝트에서 얻어낸 결과 또한, 결국 하나의 의미있는 분석 결과일 것입니다.

 

마지막 시간인 만큼 고생도 시행착오도 가장 많았지만, 오히려 포스팅 자체는 담백하게 진행할 수 있을 것 같습니다. 그러면, 바로 빠르게 시작해보겠습니다!

 

 

헤어샵과 주점 등의 데이터를 함께 가져와 분석을 시도했지만, 결국 카페와의 유의미한 관계를 도출 할 수는 없었습니다. 일부 분석 단계에서 헤어샵이 약간이나마 카페와 약한 상관관계를 보이기도 했는데요. 아무래도 주점보단 카페와 헤어샵이 같은 상권에 있고, 또 비교적 비슷하게 영향을 경우가 많아서 이와 같은 모습을 보인 것 같습니다.

 

일단, 일반카페의 폐업률(최근 5년간 영업이 이루어진 카페 중 폐업한 카페의 비율)에 대해 조금 더 유의미한 결과를 얻어보고자, Brightics Studio의 여러 분석 모델을 활용하여 모델링을 진행했습니다.

 

일반적으로, R이나 Python에서 여러 머신러닝 기법을 적용하기 위해선 매번 각기 다른 모듈을 Import하고, 새롭게 모델링 작업을 진행해주어야 합니다. 암만 어느 정도 템플릿화 해놓는다고 하여도, 여간 손이 가는게 아닌데요. Brightics에서는 Split Data 함수를 통해 Train, Test 데이터로 나누어준 후, Train - Predict - Evaluate의 3 단계를 손쉽게 적용할 수 있습니다.

 

일반카페의 폐업률을 예측해보기 위해, Linear Regression(선형회귀), Decision Tree Regression(의사결정나무), Random Forest(랜덤 포레스트) Regression, XGB Regression(XG 부스트) Regression, 총 4개의 Regression 모델링을 진행 했는데요. Feature Column을 바꾸어가며 여러 방법으로 시도했지만, 아쉽게도 모두 유의미한 수준의 예측률을 보이지 못 했습니다.

 

모든 모델에서 위와 같이 처참한 r2_score를 보여주었는데요. 기존 데이터들로 유의미한 결과 도출이 어렵다는 결론이 나왔으므로, 데이터 가공을 통해 좀 더 유의미한 새 Column을 끄집어내기로 합니다.

 

기존 Python Script에 개업 후 1년 안에 폐업한 가게를 카운팅해주는 코드를 추가하였습니다. 인허가일자와 폐업일자를 이용하여, '일년미만폐업일반카페'의 갯수를 세어주는 것인데요. Python 내장 라이브러리인 datetime을 Import하고, 인허가일자와 폐업일자의 차이를 통해 폐업까지 걸린 일자를 구하고, 조건문으로 폐업까지 365일 미만으로 영업한 일반 카페의 수를 구하여, 각 지역(도로명우편번호 기준) 그룹에 추가해주었습니다.

 

또한, 기존의 폐업률을 구하는 것과 마찬가지로, 전체 일반 카페중 영업지속일이 1년 미만인 가게의 비율을 구하여 '일년미만폐업카페비율' Column도 추가하였습니다. 

 

해당 Column을 추가하여 상관관계를 살펴본 결과입니다. 유의미하게 살펴볼 부분은, 일년미만폐업카페비율이 영업프랜차이즈카페 변수 간 -0.3의 음의 상관관계가 나타났다는 부분이었습니다. 프랜차이즈 카페가 늘어날수록 해당 지역의 일년 미만 폐업 카페비율은 줄어든다는 것인데요, 이는 프랜차이즈 카페의 수가 많은 비교적 활성화된 상권일수록 신규 일반 카페의 진입이 어려워 개업하는 비율 자체가 프랜차이즈에 비해 적거나, 높은 임대료 등으로 인해 충분한 전략을 세워 롱런이 가능한 사업자만 개업에 뛰어든다고 해석해볼 수 있겠습니다.

 

또한, 일년미만폐업카페의 수는 폐업프랜차이즈카페의 수와 0.42의 양의 상관계수, 0.0의 p-value를 나타내었습니다. 이는 폐업일반카페의 수와 폐업프랜차이즈 카페의 수 사이의 상관계수(0.23)보다 훨씬 높은 수치였는데요. 프랜차이즈 카페가 폐업 할 정도의 상권에서는 신규 개업하는 일반 카페가 더욱 버티기 힘들다는 해석을 해볼 수 있겠습니다.

 

이번 분석을 진행하면서 상당히 감탄했던, 쉽고 빠른 Brightics Studio 내장 머신러닝 분석 모델들을 사용하는 것에 대해 간략히 리뷰를 곁들이며 마무리 해보려합니다. 워낙 편리한 부분이라, 소개를 안 할 수 없다는 생각이 들었는데요. 경험이 없는 분들 또한 금방 따라해볼 수 있을 정도로, 잘 구성되어 있습니다.

 

먼저 Split Data 함수로 훈련데이터, 테스트데이터를 나누어줍니다. 각 비율은 Default로 7대 3이며, 사용자가 적절히 나눌 수 있습니다.

Seed는 난수를 지정하는 것으로, 같은 수를 입력하면 매번 동일한 Split이 이루어집니다.

 

여러 분석 모델중 가장 아래에 위치해있던, XG Boost입니다. Split Data 함수랑 연결되면 기본적으로 Train_table(훈련 데이터셋)이 연결되며, Feature Column(훈련에 사용할 특징 변수)과 Label Column(모델을 통해 예측하고자 하는 타겟 변수)를 지정합니다. XGB의 경우, 우측과 같이 Feature Importance 또한 시각적으로 나타내어 줍니다. 훈련에서 사용된 특징 변수의 중요도를 표현해주는 것입니다!

 

Predict는 우측 상단과 같이, 두개의 함수와 연결되어야 합니다. Train Set으로 훈련이 끝난 Model (XGB Regression Train)과 당연히 이어주어야 하고, 다른 하나는 Test Set (Split Data)와 이어주어야 합니다. 특히, 기본적으로 Split Data 함수는 train_table을 반환하기 때문에, Inputs 부분을 클릭해 Set Inputs 창을 띄워주고, Split Data 부분 아래에 나온 train, test table 중에 테스트 데이터 셋을 우측으로 끌어다가 옮겨서 Default로 지정된 Train Table을 Test Table로 꼭 바꾸어주어야 합니다. 이렇게 바꾸어주지 않는다면, 마치 모의고사 시험지로 시험 공부를 하여 실제 시험에서 또한 모의고사 시험지를 푸는 것과 같은 형국이 되어버립니다.

 

 

Brightics의 시각화 기능 중 Scatter Plot을 이용하면 예측의 정도를 시각화하여 볼 수 있는데요. X, Y축을 Label Column과 Prediction Column으로 지정해주면, 얼마나 정확한 예측이 이루어졌는지 확인이 가능합니다. 현재 보이는 그래프는 X, Y축 모두 0~100까지 동일한 간격의 값을 가지고 있으므로, y = x 방정식 형태의 직선에 가까울수록 정확한 예측이 될텐데요. 보다시피 그렇게 좋은 예측이 이루어지지 않았습니다.

 

 

상관관계에서 비교적 높은 수치를 보인 영업프렌차이즈카페, 폐업프렌차이즈카페 column을 특징 변수로 투입했는데요. Evaluate Regression 함수로 예측 결과를 평가해보니 그리 좋지 못한 점수를 받았습니다. r2_score 값만 봐도 이미 1.0에서 한참 떨어지는 0.127의 값이 나왔는데요. MSE, RMSE, MAE 또한 높은 수치를 보이고 있습니다. 예측에서는 그리 좋은 성과를 내지 못 했네요.

 

이번 마지막 분석 과정에서는 기존 데이터를 바탕으로 좀 더 다양한 분석을 시도해보았는데요. 다음 주에는 지금까지 정리한 결과들은 바탕으로 하여, 최종적인 리포팅 결과를 포스팅하도록 하겠습니다. 우여곡절을 겪은 개인 프로젝트 과정이었지만, 그간 Brightics Studio를 활용하여 여러 재미있는 작업을 해볼 수 있었던 좋은 경험이었던 것 같습니다.

 

그럼 다음 주에, 마지막 개인 프로젝트 포스팅으로 다시 찾아오겠습니다. 읽어주셔서 감사합니다! :)

 

 

 

 

본 포스팅은 2020년 삼성SDS Brightics 서포터즈 1기 활동의 일환으로 작성된 포스팅입니다.

반응형