2026-1 기계학습기초 Team 3 프로젝트 저장소입니다.
공공데이터를 바탕으로 개인의 디지털 적응 수준을 3단계로 분류하고, 어떤 역량과 이용 패턴이 디지털 소외와 연결되는지 해석하는 것을 목표로 했습니다.
- 데이터: NIA 디지털정보격차 실태조사(2024~2025)
- 대상: 일반국민, 고령층, 장애인, 농어민, 저소득층
- 핵심 작업:
- 전처리 및 통합 데이터셋 구성
- K-means 기반 3단계 라벨 설계
- MLP, LightGBM, SVM 분류 모델 비교
- SHAP / LIME 기반 XAI 분석
이 프로젝트의 최종 예측 타깃은 digital_stage입니다.
- 1단계: 완전 소외
- 2단계: 부분 적응
- 3단계: 자립 적응
이 라벨은 K-means 군집 결과를 디지털 역량, 서비스 이용, AI 관련 변수의 평균 차이를 바탕으로 해석해 3단계로 매핑한 결과입니다.
전처리 데이터와 라벨 데이터는 모두 train / val / test로 고정 분할되어 있습니다.
| Split | File | Rows | Columns |
|---|---|---|---|
| Train | data/preprocessed/train.csv |
18,799 | 185 |
| Validation | data/preprocessed/val.csv |
6,267 | 185 |
| Test | data/preprocessed/test.csv |
6,267 | 185 |
라벨 부착 후 데이터는 다음 파일을 사용합니다.
| Split | File | Rows | Columns |
|---|---|---|---|
| Train | data/labeled/train_labeled.csv |
18,799 | 189 |
| Validation | data/labeled/val_labeled.csv |
6,267 | 189 |
| Test | data/labeled/test_labeled.csv |
6,267 | 189 |
원천 데이터는 용량과 배포 이슈로 Git에 포함하지 않았습니다.
models/final_model_summary.csv 기준 최종 비교 결과입니다.
| Model | Val Accuracy | Val F1-macro | Test Accuracy | Test F1-macro |
|---|---|---|---|---|
| MLP | 0.9788 | 0.9787 | 0.9748 | 0.9747 |
| LightGBM | 0.9812 | 0.9812 | 0.9783 | 0.9783 |
| SVM | 0.9941 | 0.9941 | 0.9927 | 0.9927 |
MLP는 별도의 Two-Stage 재분류 실험도 수행했습니다.
| Model Variant | Test Accuracy | Test F1-macro |
|---|---|---|
| MLP Two-Stage | 0.9935 | 0.9935 |
즉, 단일 모델 기준으로는 SVM이 가장 안정적이었고, 별도 보정 구조까지 포함하면 MLP Two-Stage도 매우 높은 성능을 보였습니다.
Raw Survey Data
-> Preprocessing
-> K-means Label Design
-> Labeled Dataset Construction / final Split
-> Model Training (MLP, LightGBM, SVM)
-> Model Comparison
-> XAI Interpretation (Feature importance, SHAP, LIME)
Team-3/
├── README.md
├── LICENSE
├── data/
│ ├── raw/ # 원천데이터(파일 용량 크기로 인해 드라이브에 업로드 + 드라이브 링크)
│ ├── preprocessed/ # 전처리 후 split 데이터
│ ├── labeled/ # 최종 모델 학습용 train_labeled / val_labeled / test_labeled 데이터
├── docs/
│ └── Team3_proposal.docx # 프로젝트 제안서
├── models/
│ ├── model_config.py # 공통 feature / target / 평가 지표
│ ├── final_model_summary.csv # MLP, LightGBM, SVM 최종 성능 요약표
│ ├── model_comparison_bar.png # 전체 지표 기준 모델 비교 그래프
│ ├── model_comparison_perclass.png # 클래스별 성능 비교 그래프
│ ├── MLP/ # MLP 단일 모델 및 Two-Stage 보정 실험 결과
│ ├── LightGBM/ # LightGBM 학습, Optuna 튜닝, 중요도 결과
│ └── SVM/ # 최종 대표 모델 SVM의 평가 결과, 가중치, permutation importance 결과
├── notebooks/
│ ├── preprocess.ipynb # 원천 데이터 전처리 및 split 생성
│ ├── clustering_label_design.ipynb # K-means 기반 digital_stage 라벨 설계 및 검증
│ ├── MLP.ipynb # MLP 및 Two-Stage 재분류 실험
│ ├── LightGBM.ipynb # LightGBM 학습 및 하이퍼파라미터 튜닝
│ ├── SVM.ipynb # SVM 학습 및 GridSearchCV 튜닝
│ ├── model_comparison.ipynb # 세 모델 최종 성능 비교
│ ├── vs_eda.ipynb # 추가 탐색적 데이터 분석(EDA)
│ ├── vs_model_diagnostics.ipynb # 모델 진단용 비교 그래프 생성
│ └── feature_importance_xai.ipynb # SHAP, LIME, feature importance 기반 해석
├── outputs/
│ ├── figures/ # 최종 시각화 산출물
│ └── reports/ # 보고서/발표자료 산출물 폴더
└── src/
├── __init__.py # src 패키지 인식용 파일
└── xai_utils.py # XAI 라벨 정리, SHAP/LIME 보조 함수, SVM XAI 유틸 함수
| Notebook | Role |
|---|---|
notebooks/preprocess.ipynb |
원천 데이터 정리, 결측 처리, split 생성 |
notebooks/clustering_label_design.ipynb |
K-means 실험 및 digital_stage 설계 |
notebooks/MLP.ipynb |
MLP 및 Two-Stage 재분류 실험 |
notebooks/LightGBM.ipynb |
LightGBM 학습 및 Optuna 튜닝 |
notebooks/SVM.ipynb |
LinearSVC 학습 및 GridSearch |
notebooks/model_comparison.ipynb |
모델 성능 비교 |
notebooks/vs_eda.ipynb |
추가 EDA 및 그룹/단계 분포 분석 |
notebooks/vs_model_diagnostics.ipynb |
모델 진단용 비교 시각화 |
notebooks/feature_importance_xai.ipynb |
SHAP / LIME 기반 해석 |
모델별 노트북과 하위 README에서 사용 패키지를 확인할 수 있습니다.
핵심 패키지:
- pandas
- numpy
- scikit-learn
- matplotlib
- seaborn
- lightgbm
- optuna
- torch
- shap
- lime
| Name | Role |
|---|---|
| 김민서 | GitHub 관리, 발표, 시각화, XAI |
| 김선빈 | Preprocessing, MLP, Evaluation |
| 강준혁 | Feature engineering, K-means, Label design |
| 김민기 | LightGBM, SVM |