취준생들이 취업 시장에서 자신이 취업하고자 하는 직무를 제대로 결정하지 못하고 있고 이에 대한 수요가 존재하는 것으로 파악
취준생들에게 적합한 직무, 회사를 추천해 주는 서비스를 제안
자신에게 필요한 스펙을 모르기에 잉여 스펙이 쌓이고 있는 현실에 맞춰 필요한 스펙을 계획해 주는 서비스를 구현하고자 함
여러 채용공고사이트에는 취업자들의 스펙이나 정보를 확인할 수 있다. 이에 대한 채용자들의 데이터를 크롤링하여 채용자들이 가지고 있는 스펙 범위를 분류하고 이를 합격 범위로 라벨링한다.
이를 기업별로 차별화하여 각 채용공고의 합격범위를 예측하여 취준생의 스펙대비 적합한 채용 공고를 추천한다.
토익성적, 오픽, 언어능력, 자격증, 해외경험, 인턴경험, 수상내역, 봉사경험 등의 취업자들의 스펙 데이터를 수집하고, 기업들의 평균 스펙 데이터를 수집하여, 취업자들이 가지고 있는 스펙이 어떤 기업에 가장 적합한지를 유사도를 검사하여 매칭시켜주는 서비스를 개발하고자 한다.
모델정하기:
1. 지도학습 알고리즘(Supervised Algorithms)
의도하는 결과가 있을 때 사용합니다. 학습을 하는 동안 모델은 입력으로 들어온 값으로 변수를 조정해서 출력에 매핑합니다.
2. 비지도학습 알고리즘(Unsupervised Algorithms)
의도하는 결과가 없을 때 사용합니다. 입력 데이터 집합을 비슷한 유형의 집합으로 분류합니다.
3. 강화학습 알고리즘(Reinforcement Algorithms)
결정을 내리도록 할 때 사용합니다. 결정을 했을 때의 성공/실패에 따라 주어진 입력값에 대한 결정이 점차 달라집니다. 학습을 할수록 입력에 대한 결과 예측이 가능하게 됩니다
모델정하기
지도학습 분류로 선정
해야할 일
데이터량 27만개 정리
예측 스코어 : 0.9 이상
결과 스코어 : 0.98
전처리 고려할 점
1. 27만개 데이터의 레이블을 붙이기 어렵다 '기업정보' 묶기
2. 지원분야를 년도와 부서로 나눌 것
3. 출신전공을 4년재 초대졸 고졸 중졸 초졸로 나눌 것
4. 스팩지수 단순화
5. 토익 점수, 토익 스피킹, OPIC, 외국어 자격증 해외경험 등 결측치 처리하기
6. 기업정보 span태그 정리하기 (결측치 존재) 정보없음으로 처리 할 것
7. 결과 회사별로 라벨링 하기
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
pd.set_option('display.max_row', 5000)
pd.set_option('display.max_columns', 1000)
# 무시
pd.set_option('mode.chained_assignment', None)
data = pd.read_csv('합격자 스펙 데이터 (1~100059).csv', encoding='cp949')
data1 = pd.read_csv('합격자 스펙 데이터 (100060~200126).csv', encoding='cp949')
data2 = pd.read_csv('합격자 스펙 데이터 (200127~278149).csv', encoding='cp949')
data = pd.concat([data, data1, data2])
data
data['분기'] = data['지원분야'].str.split('\n').str[0]
data['부서'] = data['지원분야'].str.split('\n').str[1]
data.drop(['Unnamed: 0','지원분야'], axis=1, inplace=True)
a = data['출신전공'].str.contains('4년')
b = data['출신전공'].str.contains('초대졸')
c = data['출신전공'].str.contains('해외대학')
d = data['출신전공'].str.contains('대학원')
e = data['출신전공'].str.contains('고졸')
data['출신전공'][a] = '4년'
data['출신전공'][b] = '초대졸'
data['출신전공'][c] = '해외대학'
data['출신전공'][d] = '대학원'
data['출신전공'][e] = '고졸'
data['부서']=data['부서'].fillna('직무무관')
a = data['출신전공'].str.contains('4년')
a = data['부서'].str.contains('인사')
b = data['부서'].str.contains('사무')
c = data['부서'].str.contains('상담')
d = data['부서'].str.contains('조립')
e = data['부서'].str.contains('생산관리')
f = data['부서'].str.contains('서비스영업')
g = data['부서'].str.contains('보험영업')
h = data['부서'].str.contains('기술영업')
i = data['부서'].str.contains('법인영업')
j = data['부서'].str.contains('광고영업')
k = data['부서'].str.contains('해외영업')
k_1 = data['부서'].str.contains('아웃바운드TM')
l = data['부서'].str.contains('영업관리')
m = data['부서'].str.contains('전략')
n = data['부서'].str.contains('비서')
o = data['부서'].str.contains('마케팅')
o_1 = data['부서'].str.contains('광고제작')
p = data['부서'].str.contains('PR')
q = data['부서'].str.contains('상품기획 MD')
q_1 = data['부서'].str.contains('웹기획')
r = data['부서'].str.contains('디자인')
s = data['부서'].str.contains('홍보')
t = data['부서'].str.contains('퍼블리싱')
u = data['부서'].str.contains('프로그래머')
v = data['부서'].str.contains('통신기술')
w = data['부서'].str.contains('소프트웨어')
x = data['부서'].str.contains('인공지능')
y = data['부서'].str.contains('데이터베이스')
z = data['부서'].str.contains('네트워크')
data['부서'][a] = '인사'
data['부서'][b] = '사무'
data['부서'][c] = '상담'
data['부서'][d] = '생산조립'
data['부서'][e] = '생산관리'
data['부서'][f] = '영업'
data['부서'][g] = '영업'
data['부서'][h] = '영업'
data['부서'][i] = '영업'""
data['부서'][j] = '영업'
data['부서'][k] = '영업'
data['부서'][k_1] = '영업'
data['부서'][m] = '기획전략'
data['부서'][n] = '비서'
data['부서'][o] = '마케팅'
data['부서'][o_1] = '마케팅'
data['부서'][p] = '마케팅'
data['부서'][q] = '마케팅'
data['부서'][q_1] = '마케팅'
data['부서'][s] = '마케팅'
data['부서'][t] = '마케팅'
data['부서'][r] = '디자인'
data['부서'][u] = '프로그래머'
data['부서'][v] = '프로그래머'
data['부서'][w] = '프로그래머'
data['부서'][x] = '프로그래머'
data['부서'][y] = '프로그래머'
data['부서'][z] = '프로그래머'
data['출신전공'].replace('해외대학', 7, inplace=True)
data['출신전공'].replace('대학원', 6, inplace=True)
data['출신전공'].replace('4년', 5, inplace=True)
data['출신전공'].replace('초대졸', 4, inplace=True)
data['출신전공'].replace('고졸', 3, inplace=True)
data['출신전공'].replace('중졸', 2, inplace=True)
data['출신전공'].replace('초졸', 1, inplace=True)
data['자격증'].replace('-',0, inplace=True)
data['자격증'].replace('1개',1, inplace=True)
data['자격증'].replace('2개',2, inplace=True)
data['자격증'].replace('3개',3, inplace=True)
data['자격증'].replace('4개',4, inplace=True)
data['자격증'].replace('5개',5, inplace=True)
data['자격증'].replace('6개',6, inplace=True)
data['자격증'].replace('7개',7, inplace=True)
data['자격증'].replace('8개',8, inplace=True)
data['자격증'].replace('9개',9, inplace=True)
data['자격증'].replace('10개',10, inplace=True)
data['자격증'].replace('14개',11, inplace=True)
data['교내/사회/봉사'].replace('-',0, inplace=True)
data['교내/사회/봉사'].replace('1회',1, inplace=True)
data['교내/사회/봉사'].replace('2회',2, inplace=True)
data['교내/사회/봉사'].replace('3회',3, inplace=True)
data['교내/사회/봉사'].replace('4회',4, inplace=True)
data['교내/사회/봉사'].replace('5회',5, inplace=True)
data['교내/사회/봉사'].replace('6회',6, inplace=True)
data['교내/사회/봉사'].replace('7회',7, inplace=True)
data['교내/사회/봉사'].replace('8회',8, inplace=True)
data['교내/사회/봉사'].replace('9회',9, inplace=True)
data['교내/사회/봉사'].replace('12회',12, inplace=True)
data['교내/사회/봉사'].replace('-',0, inplace=True)
data['해외경험'].replace('-',0, inplace=True)
data['해외경험'].replace('1회',1, inplace=True)
data['해외경험'].replace('2회',2, inplace=True)
data['해외경험'].replace('3회',3, inplace=True)
data['해외경험'].replace('4회',4, inplace=True)
data['해외경험'].replace('5회',5, inplace=True)
data['인턴'].replace('-',0, inplace=True)
data['인턴'].replace('1회',1, inplace=True)
data['인턴'].replace('2회',2, inplace=True)
data['인턴'].replace('3회',3, inplace=True)
data['인턴'].replace('4회',4, inplace=True)
data['인턴'].replace('5회',5, inplace=True)
data['인턴'].replace('6회',6, inplace=True)
data['인턴'].replace('7회',7, inplace=True)
data['인턴'].replace('8회',8, inplace=True)
data['인턴'].replace('12회',12, inplace=True)
data['인턴'].replace('17회',17, inplace=True)
data['수상내역'].replace('-',0, inplace=True)
data['수상내역'].replace('1회',1, inplace=True)
data['수상내역'].replace('2회',2, inplace=True)
data['수상내역'].replace('3회',3, inplace=True)
data['수상내역'].replace('4회',4, inplace=True)
data['수상내역'].replace('5회',5, inplace=True)
data['수상내역'].replace('6회',6, inplace=True)
data['수상내역'].replace('7회',7, inplace=True)
data['외국어(기타)'].replace('-',0, inplace=True)
data['외국어(기타)'].replace('1개',1, inplace=True)
data['외국어(기타)'].replace('2개',2, inplace=True)
data['외국어(기타)'].replace('3개',3, inplace=True)
data['외국어(기타)'].replace('4개',4, inplace=True)
data['토익스피킹'].replace('Lv8',8, inplace=True)
data['토익스피킹'].replace('Lv7',7, inplace=True)
data['토익스피킹'].replace('Lv6',6, inplace=True)
data['토익스피킹'].replace('Lv5',5, inplace=True)
data['토익스피킹'].replace('Lv4',4, inplace=True)
data['토익스피킹'].replace('Lv2',2, inplace=True)
data['토익스피킹'].replace('-',0, inplace=True)
data['OPIC'].replace('-',0, inplace=True)
data['OPIC'].replace('AL',9, inplace=True)
data['OPIC'].replace('IH',8, inplace=True)
data['OPIC'].replace('IM3',7, inplace=True)
data['OPIC'].replace('IM2',6, inplace=True)
data['OPIC'].replace('IM1',5, inplace=True)
data['OPIC'].replace('IL',4, inplace=True)
data['OPIC'].replace('NH',3, inplace=True)
data['OPIC'].replace('NL',2, inplace=True)
data.reset_index(drop=True, inplace=True)
data['토익'] = data[data['토익'].str.contains('점')]['토익'].str.replace('점',"")
data['학점'] = data[data['학점'].str.contains('/4.5')]['학점'].str.replace('/4.5',"")
data['토익']= data['토익'].fillna(0)
data['학점']= data['학점'].fillna(0)
# from sklearn.preprocessing import LabelEncoder
# encoder = LabelEncoder()
# encoder.fit(data['합격회사'])
# data['합격회사'] = encoder.transform(data['합격회사'])
data['기업정보'].value_counts()
data['기업정보'] = data['기업정보'].str.split('</span>').str[0]
data['기업정보']= data['기업정보'].str.split('>').str[1]
data['기업정보'].value_counts()
data
data.info()
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, shuffle=True,random_state=34)
from sklearn.neural_network import MLPClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import RBF
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import classification_report
from sklearn.model_selection import cross_val_score
from sklearn.metrics import roc_auc_score , plot_roc_curve, accuracy_score
from sklearn import metrics
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
import xgboost as xgb
rf = RandomForestClassifier()
ad = AdaBoostClassifier(base_estimator =rf)
dt = DecisionTreeClassifier()
kn = KNeighborsClassifier()
lr = LogisticRegression()
rbf = RBF()
gp = GaussianProcessClassifier(1.0 * RBF(1.0))
mlp = MLPClassifier(alpha=1, max_iter=1000)
gnb = GaussianNB()
svc = SVC(random_state = 43, C = 10, gamma = 0.1, kernel ='rbf')
models = [rf,ad, dt, kn, svc, mlp, lr, gnb, svc]
for model in models:
model.fit(X_train, y_train)
pre = model.predict(X_test)
scores = cross_val_score(model, X_test, y_test, cv=5).mean().round(3)
#f1score = metrics.f1_score(y_test, y_pred).round(3)
print(model, '\n', 'Accuracy:', scores, '\n')
"스마트인재개발원에서 진행된 수업내용입니다"
스마트인재개발원
4차산업혁명시대를 선도하는 빅데이터, 인공지능, 사물인터넷 전문 '0원' 취업연계교육기관
www.smhrd.or.kr
'스마트 인재개발원 > 2차프로젝트' 카테고리의 다른 글
(광주인공지능학원) 2차프로젝트 마무리 및 다니면서 느낀점 (4) | 2021.07.17 |
---|---|
(스마트인재개발원) 2차프로젝트 머신러닝 마무리 (0) | 2021.07.17 |
(스마트인재개발원) 플라스크 연습하기(feat 텐서플로우) (0) | 2021.07.06 |
(스마트인재개발원) 2차프로젝트 데이터 전처리 2차 (모델재선택) (0) | 2021.07.05 |
(스마트인재개발원) 프로젝트 기획 발표 (1) | 2021.07.04 |