<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Workflow |</title><link>https://chaeniverse.github.io/tags/workflow/</link><atom:link href="https://chaeniverse.github.io/tags/workflow/index.xml" rel="self" type="application/rss+xml"/><description>Workflow</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Thu, 24 Oct 2024 00:00:00 +0000</lastBuildDate><image><url>https://chaeniverse.github.io/media/icon_hu_da05098ef60dc2e7.png</url><title>Workflow</title><link>https://chaeniverse.github.io/tags/workflow/</link></image><item><title>머신러닝 분류 과제 수행 단계</title><link>https://chaeniverse.github.io/blog/ml-classification-workflow/</link><pubDate>Thu, 24 Oct 2024 00:00:00 +0000</pubDate><guid>https://chaeniverse.github.io/blog/ml-classification-workflow/</guid><description>&lt;p&gt;분류(classification) 머신러닝 프로젝트를 처음부터 끝까지 끌고 가본 경험을 정리한 워크플로 가이드. &lt;strong&gt;전처리 → 변수 선택 → 모델링 → 평가&lt;/strong&gt; 순서.&lt;/p&gt;
&lt;h2 id="전처리-단계"&gt;전처리 단계&lt;/h2&gt;
&lt;h3 id="1차-변수-탐색"&gt;1차 변수 탐색&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;범주형&lt;/strong&gt;: 2x2 table과 odds ratio로 변수 영향력 점검. odds ratio가 10 이상이거나 지나치게 낮으면 sensitivity/specificity 분포가 극단적으로 왜곡되므로 별도 검토.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;연속형&lt;/strong&gt;: 기초 통계량 (mean, sd 등) 과 histogram으로 영향력 확인.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2차-변수-탐색-결측--다중공선성"&gt;2차 변수 탐색 (결측 + 다중공선성)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;결측치 처리&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;결측률 &lt;strong&gt;40% 이상&lt;/strong&gt; 이면 변수의 설명력 부족으로 판단해 제거.&lt;/li&gt;
&lt;li&gt;나머지는 imputation:
&lt;ul&gt;
&lt;li&gt;연속형 → &lt;strong&gt;median&lt;/strong&gt; (mean보다 극단값 영향 덜 받음)&lt;/li&gt;
&lt;li&gt;범주형 → &lt;strong&gt;mode&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Train set 통계량을 test set에도 동일 적용 (leakage 방지).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;다중공선성 (VIF)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Imputation 후 연속형 변수 간 VIF 산출.&lt;/li&gt;
&lt;li&gt;VIF $\ge 10$ 인 변수는 한 번에 한 개씩 제거하며 추이 관찰. cutoff는 주관적이지만 10 초과면 제거 권장.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="범주형-변수-변환"&gt;범주형 변수 변환&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;One-hot encoding은 다중공선성 우려가 있으므로, 한 카테고리를 reference로 두는 &lt;strong&gt;dummy encoding&lt;/strong&gt; 사용.&lt;/li&gt;
&lt;li&gt;Reference 카테고리는 모든 컬럼에서 0인 행 → 최종 컬럼 수 = 카테고리 수 - 1.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="정규화--표준화"&gt;정규화 / 표준화&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;연속형 변수 scale 차이가 크면 모델 설명력에 영향 → MinMaxScaler 또는 Standardization 적용.&lt;/li&gt;
&lt;li&gt;표준화 통계량 (mean, sd) 역시 &lt;strong&gt;train 기준으로 test에 동일 적용&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="변수-선택"&gt;변수 선택&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Feature가 많을수록 설명력은 ↑ but overfitting 위험 ↑.&lt;/li&gt;
&lt;li&gt;Hyperparameter 최적화 전에 변수 선택을 거친다.&lt;/li&gt;
&lt;li&gt;방법: &lt;strong&gt;RFE (Recursive Feature Elimination)&lt;/strong&gt; with &lt;strong&gt;5-fold stratified CV&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;평가 기준: &lt;strong&gt;AUROC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;RFE-CV 결과 그래프로 최적 feature 수 (예: 5개) 결정.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="모델링-단계"&gt;모델링 단계&lt;/h2&gt;
&lt;h3 id="데이터-분할"&gt;데이터 분할&lt;/h3&gt;
&lt;p&gt;전체 데이터를 &lt;strong&gt;3:1 stratified split&lt;/strong&gt; (train/test).&lt;/p&gt;
&lt;h3 id="하이퍼파라미터-탐색"&gt;하이퍼파라미터 탐색&lt;/h3&gt;
&lt;p&gt;Train 안에서 &lt;strong&gt;10-fold stratified CV&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;10-fold CV로 train/val 분할&lt;/li&gt;
&lt;li&gt;Train set 표준화 → 그 통계량으로 val set 표준화&lt;/li&gt;
&lt;li&gt;각 fold에서 성능 metric 계산 → 평균&lt;/li&gt;
&lt;li&gt;평균이 가장 높은 hyperparameter 조합 저장&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;탐색 알고리즘: &lt;strong&gt;Bayesian optimization&lt;/strong&gt; (grid / random search보다 효율적).&lt;/p&gt;
&lt;h3 id="최종-학습--평가"&gt;최종 학습 + 평가&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;전체 train data 표준화&lt;/li&gt;
&lt;li&gt;위에서 찾은 best hyperparameter로 모델 fitting → 모델 $a$&lt;/li&gt;
&lt;li&gt;Train 통계량으로 test data 표준화 → 모델 $a$ 에 넣고 성능 metric 출력&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="robustness--50회-반복"&gt;Robustness — 50회 반복&lt;/h3&gt;
&lt;p&gt;위 과정 (split → tuning → fit → test) 을 &lt;strong&gt;50번 반복&lt;/strong&gt;하고 metric의 평균을 최종 성능으로 보고. → subject selection bias를 줄이고 robustness 확보.&lt;/p&gt;
&lt;h2 id="모델-후보"&gt;모델 후보&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;XGBoost&lt;/li&gt;
&lt;li&gt;Random Forest&lt;/li&gt;
&lt;li&gt;Support Vector Machine (SVM)&lt;/li&gt;
&lt;li&gt;Logistic Regression&lt;/li&gt;
&lt;li&gt;Multi-Layer Perceptron (MLP)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="평가-지표"&gt;평가 지표&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Accuracy&lt;/li&gt;
&lt;li&gt;Precision&lt;/li&gt;
&lt;li&gt;Recall (Sensitivity)&lt;/li&gt;
&lt;li&gt;F1-score&lt;/li&gt;
&lt;li&gt;AUC-ROC&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;원문:
&lt;/p&gt;
&lt;p&gt;이 워크플로를 적용한 실제 프로젝트는
참고.&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>