[대학합격예측]EDA 및 간단한 모델 생성

포동동·2022년 12월 21일
0

😯 개인 프로젝트인듯 외주인듯

회사에서는 여전히 데이터팀보다는 기획이나 설계 파트에 관한 업무를 진행하고 있다. 따라서 나의 커리어를 위해 개인적으로 프로젝트에도 참가하고 있었다.

그러던 중, 지인으로부터 대학 합격 모델을 만들 수 있냐는 제안을 받았다. 그래서 3년치의 성적 데이터를 받아 코랩에서 전처리와 EDA, 그리고 성능 비교를 위한 간단한 모델들을 만들어보았다.

데이터는 학생의 성적 컬럼들과 지원한 학교, 학부, 학과, 지원 결과였다. 총 4만5천개정도의 데이터셋이라 데이터 자체는 충분하다고 생각했지만, 지원한 학교와 학부가 워낙 다양하고 클래스간 불균형 문제가 있어서 이게 다중분류로 예측 가능한 것인가에 대한 고민이 많았다. 예제로 찾아본 데이터들은 보통 많아야 10개 정도의 클래스들을 분류하는 모델이 많아서 어쩌면 500개가 넘는 클래스 분류가 가능한지에 대한 의심은 지금도 가지고 있다.

그리고 항상 생각하지만, 과연 인공지능이 반드시 답인가에 대한 고민도 많았다. 물론 유저 입장에서는 내가 성적을 입력하면 원하는 학교에 붙을지 안 붙을지를 예측해준다고 하면 신기하고 흥미로울지 모르나 이걸 서비스로 제공하는 사람 입장에서는 이 모델의 성능이 떨어지는데 간절한 입시생들 마음을 뒤흔들어 놓는게 맞나...라는 생각을 했다.

게다가, 지인이 운영하는 학원 입장에서도 이 모델에 투자를 해서 만들어놨는데 제대로 활용할 수 없다고 한다면 무슨 소용이 있겠는가.

하지만, 결국 니즈를 잘 파악해서 성능을 잘 올려놓으면 충분히 도전해볼 가치가 있는 프로젝트라고 생각을 해서 일단 해보겠다고 했다. 사실 ML에 대한 지식도 깊지 않고 DL은 더더욱 잘 모르기때문에(이론적으로..) "일단 돌려"라는 마인드로 도전했다...ㅎ


🔜 작업 순서

  1. 3개년 데이터를 하나의 데이터프레임으로 정리 후 간단한 전처리를 진행

  2. 데이터 탐색(EDA) 및 주요 컬럼 선정

  3. 시각화

  4. 모델 생성

    • [학교:학부]별 모델 생성해서 0(불합) 1(합격) 예측 모델 생성(특정 대학 한정)
      - ML : pycaret으로 성능 제일 좋은 거, 개별 모델들 등
      • DL : tensorflow 등
    • 본인의 성적으로 지원할만한 대학들 추천(합불 예측이 아니라 지원해볼만한 학교)
    • 성적과 희망 학부 입력하면 지원할만한 대학들 추천(학부별로 모델 생성)
  5. 개선점 정리


1️⃣ 데이터 통합 및 전처리

데이터는 총 2018, 2019, 2020년도의 성적 데이터며, 학교, 학부, 학과, 결과, 과목별 성적 컬럼으로 구성되어 있다.

# csv파일 import
df_2018 = pd.read_csv("<csv파일위치>")
df_2019 = pd.read_csv("<csv파일위치>")
df_2020 = pd.read_csv("<csv파일위치>")

# 데이터프레임 통합
total_df = pd.concat([df_2018,df_2019, df_2020], ignore_index=True)
total_df.sort_values('University', inplace=True)
total_df = total_df.reset_index(drop=True)

# 간단한 전처리
total_df = total_df[total_df['備考1'] == '学部'] # 입시 유형이 학부인 것만 남기기
total_df.drop(['コード','備考1', '備考2'], axis=1, inplace=True) # 필요없는 컬럼 삭제
total_df.columns = ['University', 'Department', 'Major', 'pass', 'N1', 'N2', 
					'6nihongo', '6kijyutsu', '6butsu', '6kagaku', '6seibutsu', 
                    '6sogo', '6su1', '6su2', '11nihongo', '11kijyutsu', 
                    '11butsu', '11kagaku', '11seibutsu', '11sogo', '11su1',
                    '11su2', 'TOEFL', 'TOEIC'] # 컬럼명 일어->영어
total_df = total_df.fillna(0) # 결측치 제거(결측치라는 것은 수험하지 않았다는 뜻)
total_df = total_df.replace(' ', 0) 
total_df = total_df.replace('  ', 0)
total_df = total_df.astype({'pass':'int', 'N1':'int', 'N2':'int', '6nihongo':'int', '6kijyutsu':'int',
							'6butsu':'int', '6kagaku':'int', '6seibutsu':'int', '6sogo':'int', '6su1':'int', 
                            '6su2':'int', '11nihongo':'int','11kijyutsu':'int', '11butsu':'int', 
                            '11kagaku':'int', '11seibutsu':'int', '11sogo':'int', '11su1':'int',
                            '11su2':'int', 'TOEFL':'int', 'TOEIC':'int'}) # 분석하기 쉽게 성적들은 전부 int로 타입 변경
profile
완료주의

0개의 댓글