전체 데이터 중 소수 클래스의 각 샘플을 순회하며 대상 점을 하나씩 선택합니다.
선택한 소수 클래스 샘플을 기준으로
같은 클래스 내에서 k개의 최근접 이웃(nearest neighbors) 을 찾습니다.
선택된 이웃 샘플과 현재 점 사이의 벡터 차이를 계산합니다.
(이웃점 – 현재점)
위에서 구한 벡터에 [0, 1] 구간의 난수 가중치를 곱합니다.
이 값을 현재 점에 더해줌으로써,
두 점 사이의 선분 상에 새로운 합성 샘플(Synthetic Sample) 을 생성합니다.

위 과정을 반복하여 필요한 수만큼의 소수 클래스 데이터를 증강(Over-sampling) 합니다.
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_train_over, y_train_over = smote.fit_sample(X_train, y_train)```