전체 글 49

[아이펠톤 프로젝트 회고] 누설자속 데이터 기반 교정 시점 예측

들어가며모두의 연구소 데이터사이언스 4기 과정의 마지막은 아이펠톤 프로젝트였다.8주 동안 기업이 제공한 실제 데이터를 다루며 과업을 수행했다.처음 접하는 도메인이라 데이터를 이해하고 탐색하는 데 많은 시간을 쏟았지만,피처 엔지니어링을 시도하며 배워가는 과정은 즐거웠다.또한 기업과의 멘토링을 통해 현업의 관점을 경험할 수 있었던 점이 큰 배움이 되었다.이번 프로젝트의 목표는 단순한 모델 성능 향상을 넘어, 교정 시점을 객관적으로 판단할 기준을 마련하는 것이었다.1. 프로젝트 개요프로젝트명: Steel Inspection Data Science Project – Calibration Prediction기간: 2025.07 ~ 09 (8주)목표: 위험 신호를 조기에 포착하여 교정(Calibration) 시점을..

[데이터 불균형 실험노트] SMOTE vs SMOTENC vs Class Weight, 최종 승자는 누구일까?

앞선 글에서 우리는 불균형 데이터를 다루는 세 가지 방법을 살펴보았다.SMOTE: 소수 클래스 데이터를 합성하여 분포를 균형 있게 맞추는 방법SMOTENC: 범주형 변수까지 고려할 수 있는 확장 기법Class Weight: 데이터는 그대로 두고 모델의 손실 함수에 가중치를 주는 방법이번 글에서는 이 세 가지 기법을 실험 결과와 함께 종합적으로 비교하고,실무에서 어떤 기준으로 선택하면 좋을지 가이드를 정리하고자 한다.📊 실험 결과 종합 비교모델기법F1-macroPR-AUC해석XGBoostbaseline0.460.4616기준 성능XGBoost+ SMOTE0.390.4050합성 데이터 효과 미미, 성능 하락 발생XGBoost+ SMOTENC0.330.3998범주형 변수 고려했으나 성능 크게 하락XGBoost..

[데이터 불균형 실험노트] Class Weight: 가볍게 적용해 본 균형 잡기 승부

불균형 데이터를 다루는 방법은 꼭 샘플링만 있는 것은 아니다.일부 모델은 class_weight 옵션을 통해 클래스별 가중치를 자동으로 조정할 수 있다.이 방법은 별도의 데이터 증강 없이도 불균형 문제를 완화할 수 있다는 장점이 있다.⚖️ Class Weight의 기본 아이디어다수 클래스보다 소수 클래스에 더 큰 가중치를 부여한다.손실 함수(loss function)를 계산할 때 소수 클래스 오류에 더 큰 패널티를 준다.scikit-learn에서는 class_weight="balanced" 옵션을 제공하며, 클래스 빈도에 반비례하도록 자동 계산된다.👉 즉, 데이터 개수를 억지로 맞추는 대신 학습 과정에서 균형을 맞추는 방식이다.📊 적용 가능한 모델로지스틱 회귀: LogisticRegression(cl..

[데이터 불균형 실험노트] SMOTENC: 범주형 변수까지 공략하기

SMOTE는 수치형 데이터에서 불균형 문제를 완화하는 데 효과적이다.그러나 실제 데이터에는 범주형 변수가 함께 존재하는 경우가 많다.이때 단순히 수치형 변수처럼 보간하면 존재하지 않는 범주 값이 생겨버리는 문제가 발생한다.이런 한계를 보완한 기법이 바로 SMOTENC (SMOTE for Nominal and Continuous data) 이다.🧩 SMOTENC의 기본 아이디어수치형 변수 → 기존 SMOTE와 동일하게 보간을 통해 합성한다.범주형 변수 → 가장 가까운 이웃(KNN) 중 다수결로 새로운 샘플 값을 정한다.👉 즉, 연속형과 범주형 변수를 동시에 다룰 수 있도록 확장된 버전이라고 할 수 있다.📊 SMOTE vs SMOTENC기법대상 변수합성 방식특징SMOTE수치형만KNN 기반 선형 보간범주..

[데이터 불균형 실험노트] SMOTE: 합성 데이터로 불균형을 돌파하다

불균형 데이터 문제를 해결하는 대표적인 방법 중 하나가 SMOTE (Synthetic Minority Oversampling Technique) 이다.이 기법은 단순히 소수 클래스 데이터를 복제하는 대신, 새로운 합성 데이터를 생성하여 분포를 균형 있게 맞춰준다.🧩 SMOTE의 기본 아이디어기존 소수 클래스 샘플과 그 주변 이웃(KNN)을 찾는다.두 점을 잇는 선분 위의 랜덤 지점을 새로운 데이터로 생성한다.이렇게 만들어진 합성 샘플은 원본 데이터에 존재하지 않았던 새로운 데이터 포인트로 간주한다.👉 즉, 데이터를 “복사”하는 것이 아니라 “보간(interpolation)” 하는 방식이 핵심이다. 아래 그림처럼 기존 소수 클래스 데이터가 극히 적었던 상황에서,SMOTE 적용 후 다수 클래스와의 경계 ..

[데이터 불균형 실험노트] 불균형 데이터란? Accuracy의 함정을 격파하기

모두의연구소 데이터 사이언스 4기 과정에서 진행한 아이펠톤 프로젝트는 기업 데이터를 기반으로 진행되고 있다.우리가 다룬 제조 기업 데이터의 가장 큰 특징은 정답(라벨)이 존재하지 않는다는 점이었다.그래서 우선적으로 임시 라벨을 부여하는 Pseudo-labeling을 통해 Target을 생성하고, 데이터 모델링을 시작했다.🎯 데이터 불균형 현상머신러닝 모델링에서 가장 먼저 확인해야 하는 것은 클래스 분포이다.Target 라벨을 어떻게 정의하느냐에 따라 조금씩 달라졌지만, 공통적으로 데이터 불균형이 매우 심했다.이진 분류 → 정상 99.86% / 결함 0.14%다중 분류(1) → 정상 99.83% / 위험 0.10% / 조정 0.07%다중 분류(2) → 정상 79.4% / 위험 13% / 조정 7.6%🤔..

반지도학습(Semi-Supervised Learning) 정리

Pseudo-labeling에 대해 정리하면서 알게 된 반지도학습에 대해 정리해보았다.📌 반지도학습이란?반지도학습은 일부 데이터에만 라벨이 주어지고 나머지는 라벨이 없는 경우에 활용하는 머신러닝 기법이다. 지도학습과 비지도학습의 장점을 결합하여, 적은 라벨 데이터로도 높은 성능을 낼 수 있도록 도와준다.🧠 반지도학습을 사용하는 이유💰 라벨링 비용 절감: 모든 데이터에 라벨을 붙이는 것은 시간과 비용이 많이 든다. 반지도학습은 적은 수의 라벨로도 학습이 가능하여 효율적이다.📈 데이터 활용 극대화: 라벨이 없는 데이터도 학습에 활용하여 모델의 일반화 성능을 향상시킬 수 있다.🔍 주요 기법의사 라벨링(Pseudo-Labeling)모델이 예측한 라벨을 새로운 학습 데이터로 사용하여 학습을 반복하는 방법..

Pseudo-labeling (의사 라벨링) 완벽 정리

모두의 연구소에서 진행하는 아이펠톤이 시작됐다. 이번 프로젝트는 기업에서 제공한 실제 데이터를 기반으로 하며, 일정 주기마다 멘토링을 통해 진행 상황을 점검하고 방향을 다잡는다. 멘토링 과정에서 프로젝트에 필요한 여러 개념을 새롭게 배우게 되었고, 그 내용을 정리해 기록으로 남기고자 한다.1. Pseudo-labeling이란?Pseudo-labeling(의사 라벨링) 은 라벨이 없는 데이터(Unlabeled Data)에 대해 모델이 스스로 예측한 값을 임시 라벨로 붙이고, 이를 학습에 다시 사용하는 기법이다.주로 반지도학습(Semi-supervised Learning) 에서 사용되며, 데이터 라벨링 비용을 줄이면서 성능 향상을 기대할 수 있다.2. 동작 원리Pseudo-labeling은 다음 4단계로 진..

제조 데이터 분석에서 추세 변화 감지(Change Point Detection) 기법 활용하기

1. 프로젝트 배경모두의연구소 데이터 사이언스 4기의 마지막 과정인 ‘아이펠톤’이 시작됐다. 아이펠톤은 기업과 연계하여 실제 데이터를 분석하거나, 제시된 주제를 기반으로 프로젝트를 수행하는 과정이다.내가 속한 팀은 한 제조 기업으로부터 데이터를 제공받아 이를 분석하고, AI 기술을 활용해 예측 모델을 구축하는 프로젝트를 맡았다.우리 팀은 특히, 제공받은 데이터에서 임계값을 설정하고 이를 바탕으로 특정 작업을 진행할지 여부를 분류(Classification) 문제로 접근하기로 했다. 하지만 처음부터 임계값 자체가 정의되어 있지 않아, 이를 어떻게 설정할지가 가장 큰 난관이었다.여러 차례의 팀 토론 끝에 특정 Feature를 새롭게 생성했고, 그 값을 기준으로 임계값을 설정하는 방법을 찾기 위해 다양한 자료..

GitHub 협업 중 main 브랜치에서 작업했는데, 다른 사람이 먼저 merge한 경우 PR 절차

협업 중 실수로 main 브랜치에서 직접 작업을 했는데, push하기 전에 다른 사람이 main에 먼저 코드를 merge했다면 어떻게 해야 할까?이 포스팅에서는 main에서 직접 작업한 상태에서 다른 사람의 merge가 먼저 반영된 상황에서, 내 작업 내용을 안전하게 PR하는 절차를 정리한다.💡 시나리오 예시나는 실수로 main 브랜치에서 직접 기능을 수정함아직 push하지 않았는데, 팀원이 다른 코드를 main에 먼저 merge함내 코드를 안전하게 최신 코드 기준으로 반영하려면?✅ Step-by-Step 작업 절차1. 현재 작업 상태 확인git status수정한 파일이 있는지 확인한다.2. 백업 브랜치 생성 (※ 중요)git checkout -b backup/my-work현재 작업 내용을 보존하기 위..