시작하며
채용 담당자가 직무에 적합한 지원자를 찾는 과정은 많은 시간과 노력이 필요한 작업입니다. 특히, 초기 인재풀에서 적합성을 평가해도 그 과정에서 놓친 지원자가 생길 가능성이 높습니다. AI 기술을 활용하면 이러한 문제를 해결하고 더 효율적인 채용 프로세스를 구축할 수 있습니다.
AI 기반 추천 시스템은 채용 담당자의 피드백(예: Good Fit 또는 Not Fit)을 학습하여, 인재풀에 포함되지 못했지만 잠재적으로 적합한 지원자를 찾아 다시 추천할 수 있습니다. 이 글에서는 간단한 예제를 통해, 텍스트 데이터를 활용한 추천 시스템의 작동 방식과 이를 구현하기 위한 핵심 기술을 살펴보겠습니다.
TF-IDF
TF-IDF(Term Frequency-Inverse Document Frequency)는 문서에서 단어의 중요도를 측정하는 기법으로, 특정 단어가 문서 내에서 자주 등장하지만, 전체 문서에서는 드물게 등장하는 경우 그 단어에 높은 가중치를 부여합니다.
TF(Term Frequency)
단어 빈도를 나타냅니다. 특정 단어가 한 문서에서 얼마나 자주 등장하는지를 계산합니다.
IDF(Inverse Document Frequency)
단어의 희귀성을 나타냅니다. 특정 단어가 전체 문서에서 얼마나 드물게 등장하는지를 계산하며, 자주 등장하는 단어는 낮은 값을 가집니다.
TF와 IDF를 곱하면, 단순히 많이 등장하는 단어가 아니라 문서의 특징을 잘 나타내는 단어에 더 높은 가중치를 부여할 수 있습니다.
TF-IDF는 의미 있는 단어에 집중할 수 있게 해줍니다. 예를 들어, "Python"이라는 단어가 특정 지원자의 이력서에서 여러 번 등장하고, 다른 지원자들의 이력서에서는 드물게 나타난다면, 이 단어는 해당 지원자의 특징을 나타내는 중요한 단서로 작용할 수 있습니다.
로지스틱 회귀
로지스틱 회귀(Logistic Regression)는 이진 분류 문제를 해결하는 알고리즘으로, 입력된 데이터를 기반으로 두 클래스 중 하나에 속할 확률을 예측합니다. 선형 회귀의 확장 형태로, 예측 값을 확률로 변환하기 위해 시그모이드(Sigmoid) 함수를 사용합니다.
선형 결합
로지스틱 회귀는 먼저 각 입력 특성 와 해당 가중치 를 결합하여 선형 결합을 계산합니다. 이 결합은 다음과 같이 나타낼 수 있습니다:
여기서 는 선형 결합 결과이고, 는 각 특성에 대한 가중치 벡터, 는 특성 벡터, 는 편향(bias)입니다.
시그모이드 함수
선형 결합 를 계산한 후, 이 값을 시그모이드 함수에 통과시켜 0과 1 사이의 확률값으로 변환합니다. 시그모이드 함수는 다음과 같이 정의됩니다:
이 함수는 입력값이 클수록 1에 가까운 값을 출력하고, 작을수록 0에 가까운 값을 출력합니다.
비용 함수와 경사 하강법
로지스틱 회귀는 로그 손실 함수(Log Loss)를 최소화하여 최적의 가중치와 편향을 학습합니다. 비용 함수는 모델의 예측값과 실제 클래스 레이블 간의 차이를 측정하며, 다음과 같이 정의됩니다:
여기서 은 샘플의 수입니다. 로지스틱 회귀는 경사 하강법(Gradient Descent)을 통해 비용 함수를 최소화하는 가중치 와 편향 를 업데이트합니다. 경사 하강법은 비용 함수의 기울기를 계산하여 가중치와 편향을 점진적으로 조정합니다. 업데이트는 다음과 같이 이루어집니다:
여기서 는 학습률(learning rate)입니다.
로지스틱 회귀는 계산이 빠르고 해석이 용이한 이진 분류 모델로, 확률적 예측을 통해 데이터에서 중요한 패턴을 학습하는 데 효과적입니다. 텍스트 분류, 의료 진단, 스팸 필터링 등 다양한 분야에서 널리 사용되고 있습니다.
코드 예시
이제, 채용 담당자의 피드백을 바탕으로 새로운 인재를 추천하는 모델을 만드는 간단한 Python 코드 예시를 살펴보겠습니다. 이 코드는 sklearn 라이브러리를 사용하여 지원자의 이력서 텍스트 데이터를 분석하고, 로지스틱 회귀 모델을 활용해 지원자가 직무에 적합한지 여부를 예측합니다.
지원자의 이력서 정보를 바탕으로, "good fit"과 "not fit"이라는 라벨을 예측하려고 합니다. 코드의 각 단계에서는 데이터 준비, 텍스트 벡터화, 모델 학습, 그리고 예측을 차례대로 진행합니다.
1단계: 데이터 준비
resumes = [
"경험 많은 소프트웨어 엔지니어로 파이썬과 머신러닝 전문.",
"통계 분석 및 AI 모델을 활용한 데이터 사이언티스트.",
"데이터베이스와 풀스택 개발에 능숙한 소프트웨어 엔지니어.",
"기초적인 파이썬과 웹 기술을 가진 주니어 개발자.",
"파이썬, 자바, SQL에 능숙한 경험 많은 소프트웨어 엔지니어."
]
labels = ['good fit', 'not fit', 'good fit', 'not fit', 'good fit']
Python
복사
•
resumes에는 지원자들의 이력서 텍스트가 포함됩니다.
•
labels에는 각 지원자에 대한 평가(good fit 또는 not fit)가 포함됩니다.
2단계: TF-IDF 벡터화
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(resumes)
Python
복사
•
TfidfVectorizer()는 단어 빈도와 역문서 빈도를 고려하여 단어의 중요도를 평가합니다.
•
X는 벡터화된 결과로, 텍스트 데이터가 수치적인 형태로 변환됩니다.
3단계: 라벨 인코딩
y = [1 if label == 'good fit' else 0 for label in labels]
Python
복사
•
y는 각 이력서에 대한 라벨을 숫자로 변환한 결과입니다.
•
good fit은 1로, not fit은 0으로 변환됩니다.
4단계: 로지스틱 회귀 모델 학습
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)
Python
복사
•
LogisticRegression() 모델을 사용하여 X와 y로 학습을 진행합니다.
•
모델은 학습 데이터를 기반으로 최적의 가중치를 찾습니다.
5단계: 새로운 데이터 벡터화
new_resumes = [
"기계 학습에 대한 지식이 있는 숙련된 파이썬 개발자.",
"프론트엔드 기술에 대한 경험이 있는 주니어 웹 개발자.",
"데이터베이스 관리에 특화된 경력 있는 소프트웨어 엔지니어."
]
X_new = vectorizer.transform(new_resumes)
Python
복사
•
vectorizer.transform()은 새로운 데이터(new_resumes)를 벡터화하여 X_new에 저장합니다.
6단계: 예측 결과 출력
predictions = model.predict(X_new)
for resume, prediction in zip(new_resumes, predictions):
print(f"지원자: {resume} - 예측: {'good fit' if prediction == 1 else 'not fit'}")
Python
복사
•
model.predict(X_new)는 X_new에 대한 예측을 수행합니다.
•
각 예측 결과는 good fit 또는 not fit으로 출력됩니다.
최종 출력 예시
지원자: 기계 학습에 대한 지식이 있는 숙련된 파이썬 개발자. - 예측: good fit
지원자: 프론트엔드 기술에 대한 경험이 있는 주니어 웹 개발자. - 예측: not fit
지원자: 데이터베이스 관리에 특화된 경력 있는 소프트웨어 엔지니어. - 예측: good fit
Shell
복사
마치며
이번 글 에서는 AI 기반 인재 추천 시스템을 활용해 채용 담당자의 피드백을 바탕으로 적합한 지원자를 추천하는 방법을 소개했습니다.
탤런트시커는 AI 기반의 강력한 인재 추천 시스템을 통해 기존의 시간과 노력이 많이 소모되던 인재 탐색 과정을 단순화하고, 숨겨진 잠재력 있는 인재까지 찾아낼 수 있도록 돕습니다. 인공지능의 분석 능력을 바탕으로 최적의 후보자를 추천받고, 빠르고 정확한 결정을 통해 더 나은 채용 경험을 만들어 보세요.
지금, 탤런트시커를 통해 AI 기반 인재소싱을 직접 경험해 보세요.
참고문헌
•
Breitinger, Corinna; Gipp, Bela; Langer, Stefan (2015-07-26). "Research-paper recommender systems: a literature survey". International Journal on Digital Libraries. 17 (4): 305–338. doi:10.1007/s00799-015-0156-0. ISSN 1432-5012. S2CID 207035184.
•
Luhn, Hans Peter (1957). "A Statistical Approach to Mechanized Encoding and Searching of Literary Information" (PDF). IBM Journal of Research and Development. 1 (4): 309–317. doi:10.1147/rd.14.0309. Retrieved 2 March 2015. There is also the probability that the more frequently a notion and combination of notions occur, the more importance the author attaches to them as reflecting the essence of his overall idea.
•
Spärck Jones, K. (1972). "A Statistical Interpretation of Term Specificity and Its Application in Retrieval". Journal of Documentation. 28: 11–21. CiteSeerX 10.1.1.115.8343. doi:10.1108/eb026526.
•
David R Cox. The regression analysis of binary sequences. Journal of the Royal Statistical
Society Series B: Statistical Methodology, 20(2):215–232, 1958.



