Giter Club home page Giter Club logo

dev-match-recommendation's Introduction

Programmers Dev-Match 채용 공고 시스템 만들기

image

1. 과제 설명

  • 프로그래머스에서 진행하는 채용 공고 시스템 과제로, 유저 정보와 직업 정보가 주어지고, 유저가 해당 포지션에 지원할지 안할지 이진 분류 형태로 예측하는 값을 정답으로 제출하는 문제다.

  • 과제 수행 기간 : 11월 1일 ~ 11월 11일

2. 작업 개요

  • 과제를 위해 주어진 데이터셋에서 어떠한 수치 정보도 주어져 있지 않음

  • 주어진 것은 훈련 데이터에 유저가 job을 지원한 여부, 유저가 취업을 위해 설정한 기술 태그, 기업이 필요로 하는 기술 태그, 그리고 기업의 사업장 규모 정보다.

  • 해당 정보에서 수치 정보로 뽑아낼 수 있는 부분들을 뽑아내는 것이 중요하다고 생각했고, 유저별 설정한 기술 스택 태그 수와 기업에서 포지션에 필요한 기술 태그 정보를 분석했음

  • 이에 따라 포지션에 필요한 스택을 유저가 일정 수 이상 갖고 있다면 지원하고, 그게 아니라면 지원하지 않을 것이라는 판단하에 유저별 태그 정보를 분류해서 적용하기 시작했음

  • 주어진 데이터를 수치화하고, 훈련 데이터 / 검증 데이터로 분류해 XGBoost 모델을 사용하게 되었음.

  • 모델 정확도는 개선의 개선을 더해 88%까지 끌어올렸고, 최종 제출 점수는 86.1임

  • 캐글에서 왜 XGBoost를 많이 사용하는지 조금은 공감할 수 있는 부분이었고, 아직 XGBoost의 실행 로직을 이해하지 못한 채로 적용했기 때문에 보다 깊이 있게 모델을 적용하지 못했다는 생각이 듦.

  • 그래도 결과적으로 대성공! bottom-up 방식으로 머신러닝 기초 모델부터 분석하려니까 최신 기법들을 못 보는 문제가 발생해서 정확도를 빠르게 끌어올지 못해서 스스로 학습 속도가 매우 느리다고 생각했는데, top-down 방식으로 최신 모델 및 사람들이 많이 찾는 모델을 우선적으로 적용하니 최신 모델의 발전사 등을 함께 가지치듯 학습할 수 있을 것으로 보임.

3. 후기

  • 미술 작품 분류하기 ~ 채용 공고 시스템까지 2개의 과제를 해보며 느낀 것은 데이터 가공 방향을 잡는 것이 모델링보다 더 많은 시간을 필요로 한다는 점임

  • 어떤 상황에 어떤 모델을 적용할지만 정확히 알고 있다면, 데이터에서 의미있는 데이터를 뽑아내는 방향에 더 집중해서 학습을 이어나갈 필요가 있음.

dev-match-recommendation's People

Contributors

ryankor avatar

Watchers

James Cloos avatar  avatar

dev-match-recommendation's Issues

K-Fold vs StratifiedKFold 차이 정리

이전에 미술작품 분류하기 프로젝트에서 K-Fold 모듈을 사용해봐야겠다는 언급을 해놨었는데, 캐글에서 다른 사람이 해놓은 프로젝트들을 쭉 읽어보다가 StratifiedKFold가 있다는 것을 알게 되었다.

왜 불필요하게 fold 를 사용해 교차 검증을 하는 모듈을 2개나 만들어놨나 싶었더니

학습셋을 K번마다 K개의 셋으로 나눠서 train 및 validation과정을 거치는 것을 KFold 교차검증이라고 한다.

하지만, 이 경우에는 train, validation 셋을 나누는 과정이 랜덤하게 나눠지므로

데이터가 imbalance한 경우에는 train, validation셋의 label의 비율이 어긋나게된다.

극단적으로 training set이 참인 label이 1000개 거짓인 label이 10개있다고 치자.

그럼 확률적으로 나누는 KFold를 사용한다면, K등분했을때 거짓인 label이 validation 셋에 1개도 없을 수 있다.

그러면 당연히 제대로된 검증이 되지 않으므로

Stratified Kfold를 사용한다.

번역하면 계층화된 KFold라는 뜻이다.

Straitified KFold를 사용하면 imbalance한 training set에서 비율에 맞게 train, validation 셋을 나눌수 있다.

출처 : https://zereight.tistory.com/252

라고 설명이 되어 있다. 즉 데이터의 비대칭성을 고려해 데이터를 나눠주는 것을 StratifiedKFold 모듈이 해주는 것이다.

대략 코드를 Pandas Dataframe에 적용해본다면, 아래와 같을 것이다.

from sklearn.model_selection import StratifiedKFold

x = train[["userID","jobID"]]
y = train[["applied"]]

stratifiedkfold = StratifiedKFold(n_splits=5,random_state= 42, shuffle=True)
print(x.shape, y.shape)

print("**************StratifiedKFold**************")
for train_index, validate_index in stratifiedkfold.split(x,y):
    print("train index:", train_index, "validate index:", validate_index)
    X_train, X_validate = x.iloc[train_index], x.iloc[validate_index]
    y_train, y_validate = y.iloc[train_index], y.iloc[validate_index]
    print("train data")
    print(X_train, y_train)
    print("validate data")
    print(X_validate, y_validate)

XGB 사용에 대해 과적합이 발생했을 경우, 매개변수 조정 방법

XGBoost은 hyper parameter가 너무 많다.

그래서 hyper parameter 튜닝이 너무 어려울텐데, 다행이도 뛰어난 알고리즘일 수록 파라미터를 튜닝할 필요가 적고, 파라미터 튜닝에 들이는 수고 대비 성능 향상 효과가 높지 않다.

그래서, <파이썬 머신러닝 완벽 가이드>에서는 overfitting 문제가 너무 심할 때 다음 5가지만 적용해보기를 추천하고 있다.

  • eta(learning_rate) 값을 낮춘다. (0.01~0.1) 그리고 eta(learning_rate)값을 낮추는 경우 num_boost_rounds(n_estimators) 는 반대로 높여준다.

  • max_depth 값을 낮춘다.

  • min_child_weight 값을 높인다.

  • gamma 값을 높인다.

  • sub_sample(subsample), colsample_bytree 를 조정해서 트리가 복잡해지는 것을 막는다.

퍼온 글 링크

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.