DACON - 제1회 국민대학교 AI빅데이터 분석 경진대회 (2023.10.16~2023.11.13 09:59
[Baseline] 사용자 기반 협업 필터링(User-based Collaborative Filtering) 설명
첫번째 apply_train_df를 선언해 apply_train.py에 있는 값들을 가져오면 57946개의 채용 지원이 있다는 것을 알 수 있다.
apply_train_df를 'resume_seq(지원자 번호)', 'recruitment_seq(채용 번호)' groupby해 2X2 Matrix로 표현한다.
(.unstack(fill_value=0) ==> 값이 없으면 0으로 입력)
총 8482명의 지원자가 있고 채용공고는 6695개 있다는 것을 확인 할 수 있다.
우선 지원 횟수가 2번 이상이면 1로 변경한다.
그 후 cosine_similarity를 적용하는데 이 함수는
3차원에서 표현하면 위의 식처럼 계산 되는 것이다.
그림 4와 같은 계산을 끝낸 user_similarity는 (8482, 8482)로 각각의 유사도가 계산되어있다.
user_similarity.dot(user_item_matrix) 같은 경우
그림 4 예시에서의 x,y로 본다면
이러한 형식으로 결과가 나온다.
즉, 우리는 (8482, 8482) x (8482, 6695)로 결과는 (8482, 6695)의 값이 된다.
예시 값을 적용 했을 때 np.array([np.abs(suer_similarity).sum(axis=1)]).T의 과정이다.
본래의 값을 넣으면 (8482,1)의 열 벡터가 나와 각 값을 나누는 것을 연산하게된다.
위 과정들을 다 구하면 각각의 유사도값이 결과로 나온다. (8482, 6695)
idx = 0, user = U00001
부터 idx = 8481, user = U08482 까지 for 문을 돌면서
해당 user가 지원한 채용 공고 부터 찾는다.
applied_jobs = set(user_item_matrix.loc[user][user_item_matrix.loc[user] == 1.index)
그 후 추천 점수가 높은 점수로 정렬한 뒤, 추천 점수가 높은 사람의 공고를 가져와 이미 지원한 공고를 제외하고
5개의 공고를 가져오게된다.(그 사람의 공고로 5개가 안되면 다음 높은 점수인 사람의 공고에서 가져온다.)
그렇게 각 user별 job 5개를 받아서
submission.csv 형태로 저장한다.
즉, sample_submission 같은 경우 지원한 곳이 비슷한 사람들을 내림차순으로 나열해서
다른 곳에 지원한 list를 제작한것과 같다.
여기 까지 문제 및 기본 submission에 대해서 설명이 끝났다.
이제 이 대회에서 고득점을 위한 방안을 생각해 봐야한다.
sample은 고작 지원한 곳만 비교를 했는데 다른 값들, 대학교, 학과, 사는 곳 등등을 포함시켜 Cosine Similary를 적용해도 되고 다른 추천 시스템 모델을 가져와 적용해도 된다.
예를 들면, 대학교 내에서 같은 학과 사람들이 특정 회사에 지원한다던지,
연계 시스템으로 인해 다들 간다던지 등 이런 정보가 포함되어있을 수 있다.
이는 유사도를 증가 시키기 때문에 같은 학교 사람들은 제거한다는 등 이러한 작업을 할 수 있다.
'경진대회' 카테고리의 다른 글
[DACON] 새싹 해커톤 - 예선 회고록 (0) | 2024.07.31 |
---|---|
[DACON] 새싹 해커톤 - 예선 준비 (0) | 2024.07.12 |
[DACON] 데이콘 빅데이터 분석 경진대회 - 에너지 부문 (0) | 2024.07.09 |
[제주 특산물 가격 예측 AI 경진대회] 회고록 (0) | 2023.11.23 |
[국민대 AI빅데이터 분석 경진대회] 회고록 (1) | 2023.11.13 |