데이터 분석

[day46] 통계야 놀자 . . . ?

경 민 2025. 4. 2. 21:14
👩🏻‍💻  Point of Today I LEARNED 
📌 SQL
● 코드카타 (group_concat)

📌 Python 
● 코드카타 
통계 라이브 세션 1회차 복습 (정규분포, 표준정규분포)

● 통계학 기초 강의 3주차까지 (가설검증의 단계와 종류)

 

내가 통계를 공부할 줄이야..

어느 정도 이해하고 빨리 진도를 나가는 것보다는

늦더라도 90% 정도는 개념 이해하고 넘어가는 게

내 공부 방식에 더 맞는 거 같아서

라이브세션, 녹강, 유튜브, 구글링 .. 등등 여러 방면에서 도움을 받으면서 

각 개념(특히 표준화/표준정규분포, 다양한 가설검증방식)에 대해 이해하려고 노력했다.

 

라이브세션, 녹강 시간은 2시간도 안 되는데

공부 시간은 12시간이 된 마법같은 하루 ^_^


1. SQL 

1-1. 코드카타 제한시간 두고 풀기

1) 코드카타 124번

group_concat(distinct 컬럼명 order by ' ' separator ' '  )
  • 그룹핑 후 같은 그룹인 애들끼리 합쳐주는 함수
  • distinct → order by → separator
  • 기본적으로 ',(콤마)'로 연결되고, separator 파라미터로 변경 가능

2) 1~10번 복습

많이 푸는 것보다 지금까지 푼 것들을 내가 잘 이해하고 숙지하고 있는지 확인하는 타이밍인 것 같아서 처음부터 다시 시작해보았다.

10번까지는 문제 없 었 음 ! (10번까지 문제 있었으면 문제있음)


2. Python

2-1. 코드카타

1) 20번 정수 내림차순 배치하기

https://school.programmers.co.kr/learn/courses/30/lessons/12933/solution_groups?language=python3

 

방법1. (처음 푼 코드) 반복문

def solution(n):
    n_list = []
    
    for i in str(n):   #n을 문자형으로 변환해서 반복
        n_list.append(i)   #n의 문자 하나하나 리스트에 담고
        n_list.sort(reverse=True)   #내림차순으로 재배치하고
        new = int(''.join(n_list))   #모든 값 합치고 숫자형으로 변환
    return new

풀긴 풀었으나 . . .

이렇게 하면 모든 단계를 매 반복마다 거치기 때문에 매우 비효율적인 코드이다.

좀더 효율적으로 바꿔보자.

 

방법2. 각 자릿수를 한 번에 문자형 리스트에 넣어줌

def solution(n):
    n_list = list(str(n))   #문자형으로 바꾸고 리스트화
    n_list.sort(reverse=True)   #내림차순
    n_list = int(''.join(n_list))   #합치고 숫자형으로 변환
    return n_list

 

방법3. 더 간결한 ver.

def solution(n):
    return int(''.join(sorted(str(n), reverse=True)))
    
# sorted(str(n)) ➜ 문자열 n을 리스트로 변환 후 정렬
# sorted(str(n), reverse=True) ➜ 내림차순 정렬
# ''.join(sorted(str(n), reverse=True)) ➜ 리스트를 문자열로 변환
  • sorted 함수는 그 자체로 새로운 리스트를 만들어주기 때문에 굳이 list() 안 걸어줘도 됨.

2-2. 통계 라이브세션 1회차 복습

어제 썼던 게시글에 추가해두었다.

표준화란 무엇이고,

왜 해야하며,

어떻게 해야 하는지

이해했다.

이해가 잘 안 가서 구글링, 유튜브까지 찾아다님 . .

정승제 생선님 강의부터 다른 고등수학 강의까지 들었음 ^ㅠ^ ..


2-3. 통계학 기초 강의 2주차~3주차

1) 핵심 개념

✅ 가설 검증 단계
1. 귀무가설(H0)과 대립가설(H1) 설정
2. 유의수준(α) 결정
3. t값 (검정통계량) 계산
4. p-값과 유의수준 비교
5. 결론 도출

 

t 검정
  • 모집단의 표준편차를 알 수 없을 때 검증하는 방법 (t검정)
  • 모집단의 표준편차를 알면? → 표준정규분포로 검증하면 됨. (z검정)
  1. 단일표본 t검정 : 표본의 표준편차를 통해 모집단의 평균을 추정(표본과 모집단이 얼마나 차이가 있는지를 검증)
  2. 독립표본 t검정 : 두 표본집단 간의 평균 차이가 우연인지, 모집단에서도 실제로 유사한 차이가 있는지를 검정
  3. 대응표본 t검정 : 동일한 집단의 특정 사건 전/후의 평균을 비교
A/B 검정
  • 두 그룹 (A/B) 중 어느 것이 더 효과적인지 평가
  • 즉, 독립표본 t검정을 활용하는 것!
  • t-통계량, p-value을 확인하고 이를 통해 통계적 유의미성을 판단한다.
    • t-통계량
      • 두 그룹 간 평균의 차이가 '얼마나' 큰지, '어떻게' 큰지를 확인
        • t값 > 0 : A그룹의 평균이 B그룹의 평균보다 크다.
        • t값 < 0 : A그룹의 평균이 B그룹의 평균보다 작다.
        • |t값| 이 크면 두 그룹 간 차이가 크다. but, p-value를 통해 이 차이가 우연인지 아닌지 판단해야 함.
        • |t값| 이 작으면 두 그룹 간 차이가 작다.
    • p-value(유의확률)
      • 위의 t값이 '우연히' 나올 확률
      • 즉, 귀무가설이 참일 때 t값(혹은 극단값)이 나올 확률
      • 통계적 유의미성을 가르는 기준이 됨.
      • 보통 0.05 유의수준(α)보다 낮으면 통계적으로 유의미하다고 본다. 즉, 귀무 가설을 기각한다.
      • 예시
        • 귀무가설 : 'A와 B의 평균이 같다.' / 대립가설 : 'A와 B의 평균이 다르다.'
        • t=2.5, p-value=0.02
          • 의미: 귀무가설이 참이라면 t값이 2.5로 나올 확률은 2%밖에 되지 않는다. 
          • (= A와 B의 평균이 같을 확률은 희박하다.)
          • (= A와 B의 평균 차이가 우연이 아닐 가능성이 더 높다.)
          • (= 귀무가설은 거짓이다.)
          • 결론 : 보통의 유의수준 0.05와 비교해서 p-value가 작기 때문에 두 집단의 차이는 통계적으로 유의미하다.
          • (= 귀무가설을 기각한다.)
t_stat, p_val = stats.ttest_ind(집단 a, 집단 b)
: 독립표본 t검정을 통해 t값, p-value를 반환

 

다중 검정
  • 여러 가설을 동시에 검정하는 방법
  • 제 1종 오류 발생 확률 증가하는 문제 발생 ! 
    • 제 1종 오류 : 귀무가설이 참인데 기각함
    • 제 2종 오류 : 귀무가설이 거짓인데 기각하지 않음
  • 해결 방법 : 유의 수준 조정해서 제1종 오류가 유의수준 이하로 유지되도록 설계
    • 본페로니 보정(기본), 튜키 보정, 던넷 보정, 윌리엄스 보정 등....
    • 본페로니 보정 : 유의수준 / 가설 개수
    • 유의 : 유의 수준을 과도하게 조정하면 제 2종 오류 발생 가능성이 높아짐. 
카이제곱검정
  • 모든 변수가 범주형 데이터일 때 사용하는 검증방법 (성별, 나이, 흡연 여부, 선호 브랜드 등)
    • 나이와 흡연 여부가 관련이 있는가?
    • 성별에 따라 선호 브랜드가 다른가?
  1. 적합성 검정 : 표본의 분포가 모집단의 분포와 얼마나 일치하는지 확인
    • p값 높으면 표본과 모집단의 분포가 비슷하다. (귀무가설 참)
    • p값 낮으면 표본과 모집단의 분포가 다르다. (귀무가설 거짓)
  2. 독립성 검정 : 두 변수가 얼마나 연관성이 있는지 확인
    • p값 높으면 두 변수는 서로 독립적이다. (귀무가설 참)
    • p값 낮으면 두 변수는 서로 연관이 있다. 유의미하다. (귀무가설 거짓)
chi2_stat, p_value = stats.chisquare()
: 카이제곱 적합성 검정을 통해 카이제곱 통계량(chi2), p-value를 반환

chi2_stat, p_value, dof, expected = stats.chi2_contingency()
: 카이제곱 독립성 검정을 통해 카이제곱 통계량(chi2), p-value, 자유도(dof), 기대 빈도(expected)를 반환
t검정, 카이제곱검정의 차이
t검정 : 연속형 숫자 데이터 (평균 비교)
카이제곱검정 : 범주형 이산 데이터 (비율 비교)

단일표본 t검정 & 카이제곱검정(적합성 검정) : 표본과 모집단의 차이를 비교
독립표본 t검정 & 카이제곱검정(독립성 검정) : 두 집단/두 변수간 비교