연도별 수능 난이도 Python으로 시각화하기

차승준·2025년 4월 19일
2

Projects

목록 보기
8/8
post-thumbnail

도합 2.5수, 3번의 수능6번의 모의평가를 치른 나에게 입시는 인생 최대의 적이다.

술, 담배보다 해로운 입시중독을 겨우 최근에 탈출했지만, 한창 수능에 허덕일 때 난이도 추세를 예측하기 위해 만든 프로그램이다.


Main Idea

수능/모의평가의 난이도는 두 가지 요소로 결정된다.

  1. 표준점수 분포, 최댓값
  2. 등급컷

표준점수의 최댓값 또는 1등급컷이 높다면 어려운 시험인 것이고, 표준점수 분포가 평균 주위에 집중되었다면 비교적 쉬운 시험인것이다.


Data

6월, 9월, 수능 이외의 모의고사는 모집단도 적고 출제기관도 다르니 포함하지 않았다.

데이터는 한국교육과정 평가원 보도자료 중, 모의평가/수능 채점결과에서 표준점수 엑셀파일을 사용했다.


난이도 책정 함수

우선 엑셀 데이터를 간단히 전처리한 후, 다음 네 가지 "난이도 지표"를 구한다.

  1. 1등급컷(상위 4%) 점수
  2. 지원자 수를 고려한 표준점수의 가중 평균
  3. 표준편차
  4. 표준점수의 최댓값

위 네 가지 지표를 활용해 최종 난이도 점수를 산출한다. 각 지표의 영향력을 고려하여 가중치를 곱하여 더하는 방법을 사용했다.

가중치의 값은 수능 난이도와 관련된 다양한 자료를 참고하여 정했다.

  1. 1등급컷 (가중치 0.3)
  2. 표준점수의 가중 평균 (가중치 0.1)
  3. 표준편차 (가중치 0.35)
  4. 표준점수의 최댓값(가중치 0.4)
def difficulty_score(test, std_max_weight=0.4, std_dev_weight=0.35, upper_bound_weight=0.3, mean_weight=0.1):
    difficulty_score = (std_max_weight * test['std_max']) + \
                       (std_dev_weight * test['std_deviation']) + \
                       (upper_bound_weight * test['upper_bound']) + \
                       (mean_weight / test['mean_score'])
    return difficulty_score

마지막으로 난이도 점수에 따라 연도별 그래프를 그리면 완성이다.

국어 연도별 수능/모의평가 난이도

2022 수능 난이도가 매우 낮은거에 절대 동의하지 못한다....프로그램 잘못 만들었네

그 외엔 필자가 직접 응시한 시험들에 비추어보면 얼추 난이도가 맞는 것 같다. 수학에 비해 난이도가 매우 들쭉날쭉하다


수학 연도별 수능/모의평가 난이도

수학의 경우 2022학년도부터 가/나평 폐지 후 선택과목으로 변경되었기 때문에 난이도가 급등한것으로 나타나지만 이는 모집단이 다르므로 비교할 수 없는 것이 맞다.

통합형 초기엔 난이도가 매우 안정하지만 최근들어 난이도 흐름이 국어를 따라가고 있다.

국어, 수학 최근 추세가 난이도 하락인 것 같다...한번더도전해볼까


전체 코드 -> Github Repo


한계점

당연히 가장 큰 한계는 난이도 지표들의 가중치를 내 마음대로 정한 것이다.

다른 수능 고인물들에게 그래프를 보여준 결과, 대부분 꽤 정확하다는 피드백을 받은 걸 보니 잘 설정한 것 같긴 하다.

그래도 내 가중치가 못 미덥다면 다른 방법으로 다음이 있다.

  1. 각각의 시험에 대해 수험생들의 체감 난이도를 검색해가며 그 추세에 맞게 가중치를 미세 조정
  2. 모든 가중치를 동일하게 설정 (단순합)
profile
CAU CSE

0개의 댓글