-
04-2 표준화와 표준점수데이터 분석/파이썬으로 배우는 데이터 분석을 위한 통계학 2022. 3. 17. 15:57
이전 시간에 표준척도에 대해 사알짝 배워봤어. 척도는 변환될 수 있다는 것을 배웠으니, '여러 척도를 하나의 표준화 된 척도로 만든다면 비교하기 쉽지 않을까?' 라는 생각을 할 수 있게 되었지! 그치?
그러한 척도를 표준척도라 하고, 이 때 사용되는 점수가 표준점수가 돼.
표준점수에 대해 좀 더 살펴볼까?
나의 1학기 국어 시험 점수가 85점이라고 가정해 볼게. 2학기 국어 시험 점수도 85점이라고 해 볼게. 앞서 배웠듯이 절대적으로 관측되는 수치는 별 의미가 없다고 했지? 이 85점이라는 점수가 정말 높은 점수인지 낮은 점수인지는 바로 알 수 없어. 비교 대상들이 필요하지. 1학기와 2학기의 시험 점수가 아래와 같다고 가정해 볼게.
1학기 우리 조 국어 시험 점수들 : 85(내 점수), 84, 83, 96, 82
2학기 우리 조 국어 시험 점수들 : 85(내 점수), 49, 73, 86, 67
내 점수는 85점으로 1학기나 1학기가 똑같지만 다른 친구들은 그렇지 않아. 비록 내 점수도 같고, 내 석차도 같고, 백분위도 같지만 1학기 시험보다 2학기 시험을 훨씬 더 잘 봤다고 할 수 있어. 왜? 다른 친구들의 점수를 보니 1학기보다 2학기 시험이 어려웠다는 것을 알 수 있거든!
통계적으로 보면 1학기 우리 조 시험 점수의 평균은 86점이야. 나는 우리 조에서 2등이지만 사실 나의 1학기 국어 시험 점수는 평균보다도 낮은 것이지. 반면 2학기 평균 점수는 72점 밖에 되질 않으니 85점이라는 내 점수는 굉장히 높은 것이라고 할 수 있을거야. 비록 같은 2등이지만 말야.
이런 차이는 변산성, 즉 '평균에서 점수가 얼마나 떨어져 있는가?' 혹은 '점수들이 얼마나 흩어져 있는가?'에 대해 고려해야만 내 점수의 진짜 가치를 알 수 있다는 것을 나타내. 다른 점수도 볼까? 이번에는 영어 시험인데 국어 시험과 마찬가지로 85점을 맞았다고 가정해 볼게.
1학기 우리 조 영어 시험 점수들 : 85(내 점수), 40, 50, 60, 90
2학기 우리 조 영어 시험 점수들 : 85(내 점수), 40, 45, 65, 90
위 영어 점수를 보면 1, 2학기 영어 시험 점수의 범위(가장 큰 점수와 가장 작은 점수의 차이)도 60, 평균도 65로 같은 것을 알 수 있어. 그리고 내 점수 85점은 평균으로부터 20점 떨어져 있지! 다만 변산성은 1학기보다 2학기가 더 크다는 것을 알 수 있어.
그럼 내 점수 85점은 1학기와 2학기 중에서 언제 더 가치가 높을까? 답은 변산성이 더 작은 1학기가 될 거야. 왜? 1학기 시험에서는 평균점수 65점 이상 받은 학생이 둘 밖에 없지만 2학기 시험에서는 셋이지. 변산성이 적다는 것은 어떻게 보면 중위권 학생들이 많다고 할 수 있고 변산성이 크다는 것은 중위권 학생들이 줄어들면서 그 만큼 하위권이나 상위권 학생들이 많다는 뜻이 될거야. 내 점수는 공부를 못 하는 학생들과 비교해서 더 높은 것 보다 공부를 어느정도 하는 학생들과 비교해서 더 높은게 더 가치가 있을거야.
아이고 힘들어. 뭐 하나 비교할라니까 이 점수 저 점수 다 봐야 되고 평균도 봐야되고 변산성도 생각해야되고 골치 아프다 그치?
그래서! 표준화된 점수를 쓰자는거야. 이 점수 척도나 저 점수 척도나 어차피 변환이 가능하잖아? 그러면 그냥 다 같이 비교할 수 있게끔 단일화 된 척도를 쓰자는거지. 그러면 비교가 훨씬 쉬울거 아냐?
척도를 어떻게 변환했는지 떠올려보면 어렵지 않다는 것을 알 수 있어. 원점을 바꾸고 싶으면 모든 점수에다 상수를 더하거나 빼면 되고, 측정 단위를 바꾸고 싶으면 모든 점수에서 상수를 곱해주거나 나눠주면 되니까! 더하기 빼기 곱하기 나누기만 할 줄 알면 되겠네! 쏘 이지!
이게 바로 표준점수야. 내 점수를 비교가 용이한 표준점수로 바꾸자는거지. 상수를 더하거나 빼거나 곱하거나 나눠서 말야. 그럼 대체 내 점수에 뭘 더하고 곱해야 표준점수가 될까?
힌트는 '표준'이라는 단어야. 우리가 표준척도나 표준점수에 대해 배우기 전에 '표준'이라는 단어가 들어간 용어를 하나 배웠었지? 그게 바로 '표준편차'야.
표준점수는 표준편차를 사용해서 만들 수 있어. 이것을 위한 표준편차였던 것이지! 표준편차는 다 계획이 있었구나!
표준점수(standard score)는표준값 혹은 z값(z score)라고도 해. 그리고 아래와같이 정의되지!
Zi는 표준점수, Xi는 점수치, X바는 평균 그리고 sx는 표준편차야. 내 점수 Xi에서 평균을 뺀 다음 표준편차로 나눠주면 표준점수를 구할 수 있어.
이제 표준점수를 구할 수 있게 되었으니 1학기와 2학기의 영어 점수를 표준점수로 만들어 볼까? 표준점수로 변환하기 전의 점수를 원점수라고 할게.
1학기 2학기 원점수 표준점수 원점수 표준점수 40 (40-65)/21.79≒-1.15 40 (40-65)/22.63≒-1.10 50 (50-65)/21.79≒-0.69 45 (45-65)/22.63≒-0.88 60 (60-65)/21.79≒-0.23 65 (65-65)/22.63=0 85 (85-65)/21.79≒0.92 85 (85-65)/22.63≒0.88 90 (90-65)/21.79≒1.15 90 (90-65)/22.63≒1.10 N=5, m=65
∑(Xi-m)²=SS=1900s²=SS/(N-1)=1900/4=475
s≒21.79N=5, m=65,
∑(Xi-m)²=SS=2050s²=SS/(N-1)=2050/4=512.5
s≒22.63점수들을 알면 평균을 알 수 있고, 평균을 알면 분산을 구할 수 있고 분산을 구하면 표준편차도 구할 수 있고 마지막으로 표준편차를 알면 표준점수로 변환시킬 수도 있는거야!
내 점수를 표준점수로 바꾸어봤더니 1학기에는 약 0.92점 2학기에는 0.88점이 되었어. 1학기 점수가 2학기 점수보다 더 높다는 것은 알겠는데 이 작은 숫자가 어떤 것을 의미할까?
또, 원점수와 평균점수가 같다면 표준점수가 0이되는 것도 알 수 있어. 당연하겠지? 분자가 0이니까 말야. 그런데 이 0은 무슨 의미를 갖고 있는걸까?
에 대한 대답은 다음 시간에 하고..
오늘은 오랜만에 파이썬을 활용해서 표준점수를 쉽게 구하는 방법에 대해 알아볼거야!
-
먼저 1학기 원점수들은 'scores_first'라는 리스트에, 2학기 원점수들은 'scores_second'라는 리스트에 준비 해 줄게.
scores_first = [40, 50, 60, 85, 90] scores_second = [40, 45, 65, 85, 90]
그리고 이 점수들을 가지고 표준편차를 활용해서 '표준점수(Z score)'를 구해볼거야. 1학기 표준점수는 'Z_score_first' 라는 리스트에, 2학기 표준점수는 'Z_score_second' 라는 리스트에 담는 것을 목표로 해보자구!
일단 원점수들의 평균과 분산 그리고 표준편차를 구해야겠지? 한 번 해봤던 거니까 빠르게 가볼게. 우선 1학기의 평균, 분산, 표준편차를 구해볼까?
'm_first'에는 평균을, 'SS_first'에는 제곱합을, 'variance_first'에는 분산을, 마지막으로 's_first'에는 표준편차를 담았고 표준편차를 출력해 봤어. 한 번 해봤던거라 쉽지? 2학기도 똑같은 방법으로 구할 수 있을거야. 만들어 볼게.
1학기와 2학기의 표준편차를 구했는데.. 코드를 잘 보니까 내용은 비슷한데 변수만 다른 것을 볼 수 있어. 그렇다면 이 긴 코드를 좀 줄일 수 있지 않을까? 특히 반복문을 잘 보면 어차피 편차를 구하는 내용은 1학기나 2학기가 같잖아. 변수만 다를 뿐이지.. 여러분들도 잘 고민해 보고 아래의 코드를 볼게.
이번에는 제곱합을 구할 때 반복문을 하나만 썼어. 대신 리스트를 활용해 항목을 반복한게 아니라 리스트의 인덱스를 활용해서 반복문을 만들었지. 어차피 1학기 점수들의 개수나 2학기 점수들의 개수가 같으니까 리스트의 길이(항목의 개수)도 같겠지? 그래서 0부터 5이전까지(즉, 0부터 4까지) 반복하는 반복자 i를 활용해서 각 리스트의 항목들과 각 평균들의 차이를 각 제곱합에 넣어준 것이지! 어렵진 않지? 코드는 다르게 생겼지만 내용이 같으니 당연히 결괏값도 같아. 출력되는 내용을 보면 알 수 있을거야.
이제 1학기와 2학기 원점수들의 표준편차를 구했으니 표준점수(Z 점수)도 구할 수 있을거야. '표준화'라고도 한다 그랬지? 표준점수를 구할 땐 원점수에서 평균을 뺀 다음 표준편차로 나눠주기만 하면 돼. 이번에도 하나의 반복문을 사용해서 만들어 볼게. 이 땐 리스트에서 사용할 수 있는 'append()' 함수를 사용하면 될거야. 그리고 표준점수는 지저분하게 나올것이 뻔하니까 'round()' 함수를 사용해서 소수점 아래 두자리 에서 반올림 해줄게!
22번과 23번 라인이 표준점수를 구하는 과정인데, 코드가 엄청 길지? 길고 복잡해서 어렵다고 느낄 수 있는데 전혀 어렵지 않아! 사실 아래의 내용이랑 똑같은 거니까.
표준점수.append(round((원점수[i]-평균)/표준편차, 2)) # Z_scores_first.append(round((scores_first[i]-m_first)/s_first, 2)) # Z_scores_second.append(round((scores_second[i]-m_second)/s_second, 2))
원점수에서 평균을 뺀 다음 표준 편차로 나눈 것을,
소수 두 번째 자리에서 반올림 한 다음,
표준점수 리스트에 추가
하는 내용을 하나의 코드로 나타냈으니 코드가 길어질 수 밖에 없었어. 변수명도 길었고 말야. 그래도 한글로 적는 것 보다는 훨씬 짧잖아? 하나 하나 살펴보면 그렇게 어려운 것도 아니고 말야! 하핫!
코드를 실행해 보면 1학기와 2학기의 표준점수들을 볼 수 있어. 깔끔하지?
-
이제 다음 시간까지 표준점수가 갖는 의미에 대해 생각해 보고 표준점수에 대해 좀 더 자세히 알아볼게! 안뇽!
'데이터 분석 > 파이썬으로 배우는 데이터 분석을 위한 통계학' 카테고리의 다른 글
04-4 표준점수의 평균과 표준편차 (0) 2022.03.17 04-3 파이썬으로 표준화 (0) 2022.03.17 04-1 척도 (0) 2022.03.17 03-8 모집단과 표본집단 : 모수치와 통계치 (0) 2022.03.17 03-6 변산성의 지표 1 : 분산과 자유도 (0) 2022.03.17