📍 간단 후기
🏷️ 수업
전반적으로 모델 학습한 데이터의 저장 및 분석을 진행했다. 저번주에 배웠던 기본 지식을 바탕으로 수업했다.
추론 -> loss 계산 -> parameter update -> gradient 초기화
무한 반복이었다.....
추가적으로 성능 개선 방법 및 epoch이나 step 수에 따른 accuracy 계산 진행이 가장 큰 수업 내용이다.
🏷️ 프로젝트
전체적인 주제는 가입 고객 이탈 예측이다. 그렇다면 과정은 다음과 같다.
고객 이탈 데이터 찾기 및 저장 -> 전처리 -> 모델링(딥러닝 or 머신러닝) -> best model 선택 -> app 구현 -> 시각화
우리 조는 위 과정과 같이 큰 틀부터 잡은 후에 작업을 진행했다. 주제는 서울시 자영업 폐업률 예측이다. 개업할 곳의 위치, 업종, 프랜차이즈 여부 등을 활용한 데이터를 사용했다. 식상한 말일 수도 있지만, 워낙 뛰어나신 분들이랑 같이 하게 되어서 다른 조보다 훨씬 수월하게 프로젝트가 진행되었다.
📍 좋았던 점
- 이진분류(Binary Classification)

이진분류는 0과 1로 target을 나눈다. 이를 위해 dictionary 구조를 사용했다.

이후 이진분류를 위해 Sigmoid 함수를 사용한다. 저번주에 다뤘던 머신러닝인 MLP를 이용해 이진분류를 진행했다. MLP는 Input Feature와 Output Feature 수를 지정해주어야 한다. 이를 위해 input Layer를 30으로, Output Layer 수를 1로 설정했다. 저번주의 개념에 이어서 선형함수를 이용해서 학습을 진행하기 때문에 ReLU 함수를 이용해 비선형성을 추가해 모두 선형성이 되는 것을 방지했다.
- 성능 개선

train -> validation 과정이 모델 학습의 대부분이다. 이후 모델을 저장할 때 validation 시 나오는 loss값과 best 값을 비교한다. 결론적으로는 loss값이 작을수록 성능이 좋은 모델이다. 이에 따라 if문으로 묶어 best보다 loss가 더 작을 경우에는 epoch에 대한 for문(모든 epochs)을 다 돌지 않고 중간에 멈추어 시간을 단축한다.
📍 부족한 점
- 모델 저장 - Ordered Dictionary(OrderedDict)

이름 그대로 순서가 있는 Dictionary 이다. Dictionary의 특성상 Key-Val 값으로 전달된다. 이때 사용되는 객체가 state_dict이다. pytorch에 학습된 파라미터를 저장하거나 불러오는 기능을 수행한다. 모델의 구조는 저장하지 않기 때문에 불러올 때 모델을 먼저 생성하고 생성한 모델에 불러온 파라미터를 덮어씌운다.
한마디로 모델의 파라미터 저장 형식이라고 보면 된다.
- Overfitting 규제 - Dropout

Overfitting의 이유는 다음과 같다.
- 너무 복잡한 모델은 학습시 Train dataset으로부터 너무 많은 특성을 찾기 때문에 데이터에 대한 일반성이 떨어지게 된다. 그래서 표현력이 좋은(파라미터가 많은) 복잡한 모델인 딥러닝 모델은 Overfitting에 취약하다.
Dropout Layer는 Dropout rate를 지정하여 Dropout Node를 생성한다.
- Dropout Node : 학습대상에서 빠져 해당 노드를 off
말 그대로 Node를 drop하여 사용하지 않겠다는 얘기이다. 이는 학습 시에만 사용해야 한다. 검증, 테스트, 추론 시에는 적용하면 안 된다는 점 명심하자. 이는 학습 시 영향을 주는 것을 사전방지하는 것이지, 다른 과정 수행 시에는 당연히 포함을 해야 한다는 것이다.
📍 성찰 및 마무리
아무래도 이번주 성찰 및 마무리는 프로젝트 이야기로 시작해야겠다.
우리 조의 사전 데이터는 크게 매출액 데이터와 폐업 및 개업 수 데이터 2개이다. 이를 위해 merge를 진행해야 한다.

병합을 위해서는 주요 칼럼을 기준으로 병합해야 한다. 이를 on이라는 변수 내에 저장한 후 merge를 진행한다. 이후 데이터 전처리를 진행한다. 기존에 사용하던 데이터는 코드로 구분되고, 이름으로 구분되는 등 str 값들이다. 이를 위해 Label Encoding을 진행하였다. 쉽게 얘기해서 Category data -> integer data 변환이다. 이를 통해 구분을 짓고 모델 학습을 진행한다.

폐업률을 예측하기 위해 사용한 모델은 위 그림과 같다. 머신러닝 모델들을 주로 활용했다. 더 발전한 딥러닝을 사용하려고 MLP를 시도해 봤으나, 머신러닝 모델 성능이 좋아 채택했다.

CatBoost와 Random Forest를 채택했다. Catboost는 성능이 가장 좋았고, Random Forest는 비교를 위해 Feature importance 생성 용으로 사용하였다.
마지막으로 Hyper Parameter Tuning을 진행한다. 우리 조는 GridsearchCV 알고리즘을 사용했다. 이 알고리즘은 가능한 모든 조합을 시도해 최적의 Parameter를 찾아준다. 이를 통해 나머지 지표들도 확인할 수 있었다.
위 과정처럼 아주 다양하고 미미하게 알고 있던 개념들을 직접 학습 및 프로젝트에 적용해 보는 경험을 했다. 이는 아주 뜻깊은 경험이었다. 가장 단기간에 프로젝트를 다시 진행한 거라 그런지 몰라도 조금은 더 명확하게 팀 프로젝트 진행과정을 이해했고, 활용했다. 진행 과정 중에 모르는 것도 많았고, 아직 자세하게 다 알지는 못하지만 이만큼 성장했다는 것에 대한 뿌듯함을 안고 마무리하겠다.
다음 주부터는 다시 공모전과 코딩테스트 스터디를 진행할 것이다. 물론 수업도 다시 진행한다. 다시 한번 시간에 신경 쓰면서 학업에 집중할 시간이 왔다. 우선도를 잘 선정해서 잘 진행했으면 좋겠다.
+++
streamlit-github cloud 연동 및 배포 가능 메모...
LLM COME ON
'[SKN FAMILY AI CAMP] > 주간' 카테고리의 다른 글
| 🐉 SKN FAMILY AI CAMP 13기 11주차 후기 (2025.06.02 ~ 2025.06.05) (2) | 2025.06.05 |
|---|---|
| 🐉 SKN FAMILY AI CAMP 13기 9주차 후기 (2025.05.19 ~ 2025.05.23) (2) | 2025.05.23 |
| 🐉 SKN FAMILY AI CAMP 13기 7주차 후기 (2025.05.07 ~ 2025.05.09) (2) | 2025.05.09 |
| 🐉 SKN FAMILY AI CAMP 13기 6주차 후기 (2025.04.28 ~ 2025.05.02) (1) | 2025.05.02 |
| 🐉 SKN FAMILY AI CAMP 13기 4주차 후기 (2025.04.14 ~ 2025.04.18) (0) | 2025.04.18 |