Help us improve
Share bugs, ideas, or general feedback.
From imbalance-handling
Balances class-imbalanced datasets using oversampling (SMOTE, ADASYN, Borderline), undersampling, or hybrids on train split only, saving resampled X/y train/test to output directory.
npx claudepluginhub dandacompany/dantelabs-agentic-school --plugin imbalance-handlingHow this command is triggered — by the user, by Claude, or both
Slash command
/imbalance-handling:balance-dataThe summary Claude sees in its command listing — used to decide when to auto-load this command
# /balance-data 클래스 불균형 데이터셋을 다양한 리샘플링 기법으로 균형 있게 조정합니다. ## Usage ## What This Command Does ### 1. 데이터 로드 및 검증 - 전처리된 특성(X)과 타겟(y) 데이터 로드 - 데이터 shape 및 클래스 분포 확인 - 불균형 비율 계산 ### 2. Train/Test 분리 (Data Leakage 방지) **중요**: 리샘플링은 **Train 데이터에만** 적용! ### 3. 리샘플링 적용 #### SMOTE (Synthetic Minority Over-sampling Technique) **특징**: - 소수 클래스의 합성 샘플 생성 - k-NN 기반 보간 - 가장 널리 사용됨 **적용 시기**: 대부분의 경우 (기본 추천) #### ADASYN (Adaptive Synthetic Sampling) **특징**: - 학습하기 어려운 샘플에 더 많은 가중치 - SMOTE보다 정교한 샘플 생성 **적용 시기**: SMOTE보다 향상된 성능 필요 시 #### BorderlineSMOTE **특징**: - 경계선 근처 샘플만 오버샘플링 - 노이즈 ...
/experimentDesigns an ML experiment with hypothesis, split strategy, leakage checks, and evaluation plan. Searches prior work, detects type (supervised, unsupervised, time-series, anomaly), and tailors workflow.
/text-classificationApplies LLM-based text classification expertise to a provided task, covering codebook design (Halterman & Keith format), learning regime selection, human-LLM hybrid workflows, cross-model validation, and agreement statistics.
/split-dataAnalyzes context to execute AI/ML tasks: generates code with validation and error handling, performance metrics, saves artifacts, and creates documentation.
/data-scientistAdopts data-scientist persona to develop ML models, perform data analysis, and validate statistics based on the provided request.
/optimize-dlAnalyzes context to generate AI/ML task code with validation, error handling, performance metrics, insights, artifacts, and documentation.
Share bugs, ideas, or general feedback.
클래스 불균형 데이터셋을 다양한 리샘플링 기법으로 균형 있게 조정합니다.
# SMOTE 사용 (기본값)
/balance-data \
--X-path "projects/creditcard-fraud-detection/data/processed/creditcard_processed_X.csv" \
--y-path "projects/creditcard-fraud-detection/data/processed/creditcard_processed_y.csv"
# 타겟 비율 지정 (1:10)
/balance-data \
--X-path "projects/creditcard-fraud-detection/data/processed/creditcard_processed_X.csv" \
--y-path "projects/creditcard-fraud-detection/data/processed/creditcard_processed_y.csv" \
--method smote \
--ratio 0.1
# ADASYN 사용
/balance-data \
--X-path "projects/my-project/data/processed/data_processed_X.csv" \
--y-path "projects/my-project/data/processed/data_processed_y.csv" \
--method adasyn
# 출력 디렉토리 지정
/balance-data \
--X-path "projects/my-project/data/processed/data_processed_X.csv" \
--y-path "projects/my-project/data/processed/data_processed_y.csv" \
--output-dir "projects/my-project/data/balanced"
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
중요: 리샘플링은 Train 데이터에만 적용!
from imblearn.over_sampling import SMOTE
smote = SMOTE(sampling_strategy=0.1, random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
특징:
적용 시기: 대부분의 경우 (기본 추천)
from imblearn.over_sampling import ADASYN
adasyn = ADASYN(sampling_strategy=0.1, random_state=42)
X_resampled, y_resampled = adasyn.fit_resample(X_train, y_train)
특징:
적용 시기: SMOTE보다 향상된 성능 필요 시
from imblearn.over_sampling import BorderlineSMOTE
borderline = BorderlineSMOTE(sampling_strategy=0.1, random_state=42)
X_resampled, y_resampled = borderline.fit_resample(X_train, y_train)
특징:
적용 시기: 클래스 경계가 불분명한 경우
from imblearn.under_sampling import RandomUnderSampler
undersampler = RandomUnderSampler(sampling_strategy=0.5, random_state=42)
X_resampled, y_resampled = undersampler.fit_resample(X_train, y_train)
특징:
적용 시기: 데이터가 충분히 많은 경우 (100만 건 이상)
from imblearn.combine import SMOTETomek
smote_tomek = SMOTETomek(random_state=42)
X_resampled, y_resampled = smote_tomek.fit_resample(X_train, y_train)
특징:
적용 시기: 노이즈가 많은 데이터
저장 파일:
X_train_balanced.csv: 리샘플링된 Train 특성y_train_balanced.csv: 리샘플링된 Train 타겟X_test.csv: 원본 Test 특성 (리샘플링 X)y_test.csv: 원본 Test 타겟 (리샘플링 X)projects/{project-name}/data/processed/
├── X_train_balanced.csv # 리샘플링된 Train 특성
├── y_train_balanced.csv # 리샘플링된 Train 타겟
├── X_test.csv # 원본 Test 특성
└── y_test.csv # 원본 Test 타겟
| 방법 | 유형 | 속도 | 성능 | 사용 시기 |
|---|---|---|---|---|
| SMOTE | Over-sampling | 보통 | 우수 | 기본 추천 |
| ADASYN | Over-sampling | 느림 | 매우 우수 | 정교한 샘플링 필요 |
| BorderlineSMOTE | Over-sampling | 보통 | 우수 | 경계 불분명 |
| RandomUnderSampler | Under-sampling | 빠름 | 보통 | 대용량 데이터 |
| SMOTE-Tomek | Hybrid | 느림 | 매우 우수 | 노이즈 많음 |
| 원본 비율 | 권장 ratio | 최종 비율 | 설명 |
|---|---|---|---|
| 1:500 | 0.1 | 1:10 | 극심한 불균형 → 보수적 |
| 1:100 | 0.2 | 1:5 | 심한 불균형 |
| 1:50 | 0.5 | 1:2 | 중간 불균형 |
| 1:10 | 1.0 | 1:1 | 가벼운 불균형 → 완전 균형 |
주의: ratio를 너무 높이면 과적합 위험!
/balance-data \
--X-path "projects/creditcard-fraud-detection/data/processed/creditcard_processed_X.csv" \
--y-path "projects/creditcard-fraud-detection/data/processed/creditcard_processed_y.csv" \
--method smote \
--ratio 0.1
결과:
/balance-data \
--X-path "projects/customer-churn/data/processed/churn_processed_X.csv" \
--y-path "projects/customer-churn/data/processed/churn_processed_y.csv" \
--method smote \
--ratio 1.0
결과: 완전 균형 (1:1)
/balance-data \
--X-path "projects/my-project/data/processed/X.csv" \
--y-path "projects/my-project/data/processed/y.csv" \
--method adasyn \
--ratio 0.2
# Optuna로 자동 튜닝
import optuna
def objective(trial):
ratio = trial.suggest_float('ratio', 0.05, 0.5)
# ... 리샘플링 및 모델 학습
return f1_score
model = XGBClassifier(scale_pos_weight=578)
/profile-data: 클래스 분포 확인/engineer-features: 전처리 (리샘플링 전 필수)/train-models: 모델 학습 (리샘플링 후)imbalance-handler (필수): 클래스 불균형 처리⚠️ 주의사항:
💡 팁:
/engineer-features)/profile-data)