신뢰도의 이해와 측정
1. 신뢰도의 개념
신뢰도(Reliability):
→ 같은 대상을 반복해서 측정했을 때, 결과가 **얼마나 일관되게 나오는가**
쉽게 말하면:
- 체중계를 생각해보자. 내가 계속 올라갔을 때 체중이 매번 비슷하게 나온다면 **신뢰도 높음**
- 어떤 날은 55kg, 어떤 날은 65kg, 어떤 날은 50kg → **신뢰도 낮음**
신뢰도가 높으면:
- 측정 결과가 일관적이고 믿을 수 있음
- 측정 도구(설문지, 시험지, 검사도구)가 제대로 작동한다는 의미
2. 신뢰도 측정 방법
(1) 재검사법 (Test-retest method)
- 같은 사람에게 **같은 질문을 일정 시간 간격 두고 두 번** 묻는다.
- 두 번의 결과가 비슷하다면 → 신뢰도 높음
- 📌 **예시:**
- 첫 주에 “하루 평균 스마트폰 사용시간은 몇 시간입니까?”
- 2주 뒤 같은 질문 → 두 답변이 크게 다르지 않다면 신뢰도 ↑
- ⚠️ **주의:** 첫 번째 답을 기억해서 그대로 말하거나, 그 사이 특별한 사건이 생기면 결과가 달라질 수 있다.
(2) 반분법 (Split-half method)
- 설문 문항을 **절반으로 나눠서** 두 집단처럼 분석
- 두 결과가 비슷하면 신뢰도 높음
- 📌 **예시:**
- 10문항짜리 수학 자신감 설문 → 1~5번과 6~10번으로 나눔
- 두 그룹의 점수가 비슷하다면 신뢰도 ↑
(3) 내적 일관성 분석 (Internal consistency)
- **한 개념을 여러 문항으로 물었을 때**, 그 답변들이 서로 얼마나 일관성이 있는지 확인
- 가장 많이 쓰이는 지표: **크론바흐 알파(Cronbach’s α)**
- 📌 **예시:**
- “학교 수업이 재미있다”, “학교 수업에 집중한다”, “학교 수업에서 배운 것을 활용한다”
- 세 문항 모두 비슷한 경향으로 응답 → 신뢰도 ↑
- 신뢰도는 측정 결과의 **일관성**을 의미한다.
- **재검사법:** 시간 차이를 두고 같은 질문 반복
- **반분법:** 설문을 반으로 나누어 비교
- **내적 일관성:** 문항들이 서로 잘 맞아야 신뢰도 ↑
- 신뢰도가 높아야 **측정 결과를 믿고 해석할 수 있다.**
타당도의 이해와 측정
1. 타당도의 개념
타당도(Validity):
→ 내가 측정하려는 것을, 도구가 **정확하게** 잘 측정했는가?
신뢰도 vs 타당도
- 신뢰도: 결과가 **일관적**인가? (항상 비슷한 값 나오는가?)
- 타당도: 결과가 **정확한가?** (내가 진짜 알고 싶은 걸 제대로 재고 있는가?)
📌 **예시**
- 저울이 항상 +2kg으로 잘못 맞춰져 있다면?
- 무게는 매번 일정하게 나오므로 → **신뢰도 높음**
- 하지만 실제보다 항상 2kg 더 나오므로 → **타당도 낮음**
2. 타당도의 종류
(1) 내용 타당도 (Content Validity)
- **정의:** 측정도구가 그 개념을 빠짐없이 잘 대표하고 있는가?
- 📌 **예시:**
- “수학 실력”을 측정하는 시험인데 덧셈 문제만 나오면? → 내용 타당도 낮음
- 여러 단원(방정식, 기하, 확률 등)을 골고루 묻는다면 → 내용 타당도 높음
(2) 기준 타당도 (Criterion-related Validity)
- **정의:** 측정 결과가 어떤 **기준(Outcome)**과 잘 맞아떨어지는가?
- 📌 **예시:**
- “수능 모의고사 점수”와 “실제 수능 점수”가 비슷하다면 → 기준 타당도 높음
- 신입사원 선발 시 “학점”이 실제 업무 성과와 비슷하다면 → 학점의 기준 타당도 높음
(3) 개념 타당도 (Construct Validity)
- **정의:** 추상적인 개념을 제대로 재고 있는가?
- 📌 **예시:** ‘자존감’이라는 심리적 개념을 설문으로 재려 할 때
- **집중 타당성(Convergent Validity):** 자존감을 다른 방식(설문, 인터뷰, 관찰)으로 측정했을 때 결과가 서로 비슷해야 함
- **판별 타당성(Discriminant Validity):** 자존감 설문 결과와 “우울감” 같은 전혀 다른 개념 측정 결과는 높은 상관관계가 없어야 함
- **타당도:** “정확히 내가 알고 싶은 것을 재고 있는가?”
- **내용 타당도:** 개념의 내용을 빠짐없이 대표했는가?
- **기준 타당도:** 다른 기준과 결과가 잘 맞아떨어지는가?
- **개념 타당도:** 추상적 개념을 제대로 측정했는가? (집중/판별 구분)
- 신뢰도가 높아도 타당도가 낮을 수 있으므로, **둘 다 중요**하다.
신뢰도 분석 실습 (Python)
1. 크론바흐 알파(Cronbach’s Alpha)
- **정의:** 설문 문항들이 얼마나 서로 비슷한 경향으로 응답되는지(=내적 일관성)를 나타내는 지표
- **값의 범위:** 0 ~ 1
- 0.7 이상 → 보통 “신뢰도 높다”라고 판단
- 0.5 이하 → 신뢰도 낮아 설문 문항 개선 필요
- **비유:**
- 한 반 학생이 모두 같은 시험을 여러 문제로 풀었다고 하자.
- 문제들이 비슷한 능력을 묻고 있다면 점수가 비슷한 패턴으로 움직일 것 → 크론바흐 알파 ↑
2. 가상 시나리오
- **주제:** 인지욕구(Need for Cognition)
- → “사람이 깊이 생각하기를 즐기는 성향”
- **측정 도구:** 7개 문항, 0점(전혀 아니다) ~ 6점(매우 그렇다) 척도
- **응답자 수:** 148명
- 📌 **특수 케이스:**
- 6번 문항은 부정형 (“나는 오래 생각하는 걸 좋아하지 않는다”) → 점수를 반대로 바꿔줘야 함 (**역코딩**)
3. Python 실습
import pandas as pd
import numpy as np
# 가상 데이터 생성 (148명, 7개 문항, 응답 0~6)
np.random.seed(42) # 재현성을 위해 시드 고정
data = np.random.randint(0, 7, size=(148, 7))
df = pd.DataFrame(data, columns=[f'문항{i+1}' for i in range(7)])
# 6번 문항은 역코딩 처리
df['문항6'] = 6 - df['문항6']
# 크론바흐 알파 함수 정의
def calculate_cronbach_alpha(df):
"""
주어진 DataFrame의 문항들에 대한 크론바흐 알파 계수를 계산합니다.
Args:
df (pd.DataFrame): 각 열이 설문 문항을 나타내는 데이터프레임.
Returns:
float: 계산된 크론바흐 알파 계수.
"""
n_items = len(df.columns) # 문항 수
item_variances = df.var() # 각 문항의 분산
total_variance = df.sum(axis=1).var() # 총점의 분산
alpha = (n_items / (n_items - 1)) * (1 - (item_variances.sum() / total_variance))
return alpha
# 크론바흐 알파 계산
cronbach_alpha = calculate_cronbach_alpha(df)
print(f"크론바흐 알파 계수: {cronbach_alpha:.4f}")
# 해석
if cronbach_alpha >= 0.7:
print("=> 신뢰도가 높습니다. (문항 구성이 적절)")
else:
print("=> 신뢰도가 낮습니다. (문항 개선 필요)")
4. 결과 해석
- **예상 출력:**
- 크론바흐 알파 계수: 0.7247
- => 신뢰도가 높습니다. (문항 구성이 적절)
- **의미:**
- 설문지 문항들이 비슷한 개념(인지욕구)을 잘 측정하고 있다.
- 만약 알파가 낮았다면, 일부 문항이 엉뚱한 개념을 묻고 있음을 시사
신뢰도가 낮은 설문 예시
1. 시나리오
- 주제는 여전히 **인지욕구(Need for Cognition)**지만,
- 일부 문항이 **엉뚱한 내용**을 포함하도록 설계 → 문항들이 서로 다른 개념을 측정
- 예를 들어:
- 문항 1: “나는 새로운 아이디어를 생각하는 것을 즐긴다.” (인지욕구)
- 문항 2: “나는 수학 문제를 풀 때 몰입한다.” (인지욕구)
- 문항 3: “나는 운동하는 것을 좋아한다.” (엉뚱한 개념)
- 문항 4: “나는 영화 보는 것을 즐긴다.” (엉뚱한 개념)
👉 이렇게 되면 답변 패턴이 뒤죽박죽 → 크론바흐 알파 ↓
2. Python 실습
import pandas as pd
import numpy as np
np.random.seed(24)
# 신뢰도 낮은 설문 데이터 (148명, 7문항)
# 일부 문항은 '무작위' 값으로 넣어서 일관성이 약하게 함
data_low_reliability = np.column_stack([
np.random.randint(3, 7, size=148), # 문항1 (인지욕구)
np.random.randint(2, 7, size=148), # 문항2 (인지욕구)
np.random.randint(0, 7, size=148), # 문항3 (엉뚱한 문항)
np.random.randint(0, 7, size=148), # 문항4 (엉뚱한 문항)
np.random.randint(3, 7, size=148), # 문항5 (인지욕구)
np.random.randint(0, 7, size=148), # 문항6 (엉뚱한 문항)
np.random.randint(2, 7, size=148) # 문항7 (인지욕구)
])
df_low = pd.DataFrame(data_low_reliability, columns=[f'문항{i+1}' for i in range(7)])
# 크론바흐 알파 함수 (앞서 정의한 것 재사용)
def calculate_cronbach_alpha(df):
"""
주어진 DataFrame의 문항들에 대한 크론바흐 알파 계수를 계산합니다.
Args:
df (pd.DataFrame): 각 열이 설문 문항을 나타내는 데이터프레임.
Returns:
float: 계산된 크론바흐 알파 계수.
"""
n_items = len(df.columns)
item_variances = df.var()
total_variance = df.sum(axis=1).var()
alpha = (n_items / (n_items - 1)) * (1 - (item_variances.sum() / total_variance))
return alpha
cronbach_alpha_low = calculate_cronbach_alpha(df_low)
print(f"신뢰도가 낮은 설문 - 크론바흐 알파: {cronbach_alpha_low:.4f}")
3. 예상 결과
- **출력:**
- 신뢰도가 낮은 설문 - 크론바흐 알파: 0.4503
- **해석:**
- 0.7 기준보다 낮음 → **문항 간 일관성이 부족**
- 이유: 일부 문항이 주제(인지욕구)와 상관없는 내용을 포함 → 측정하고자 하는 개념을 제대로 재지 못함