티스토리 뷰

SQL 코드카타

Q140. Weather Observation Station 8

1. 문제 링크: https://www.hackerrank.com/challenges/weather-observation-station-8/problem

2. 정답 코드:

SELECT DISTINCT CITY
FROM STATION
WHERE (LEFT(CITY, 1) = 'a' OR LEFT(CITY, 1) ='e' OR LEFT(CITY, 1) ='i' OR LEFT(CITY, 1) ='o' OR LEFT(CITY, 1) ='u')
  AND (RIGHT(CITY, 1) = 'a' OR RIGHT(CITY, 1) ='e' OR RIGHT(CITY, 1) ='i' OR RIGHT(CITY, 1) ='o' OR RIGHT(CITY, 1) ='u');

 

Q141. Weather Observation Station 9

1. 문제 링크: https://www.hackerrank.com/challenges/weather-observation-station-9/problem

2. 정답 코드:

SELECT DISTINCT CITY
FROM STATION
WHERE (LEFT(CITY, 1) <> 'a' AND LEFT(CITY, 1) <> 'e' AND LEFT(CITY, 1) <> 'i' AND LEFT(CITY, 1) <> 'o' AND LEFT(CITY, 1) <> 'u');

 

Q163. Weather Observation Station 18

1. 문제 링크: https://www.hackerrank.com/challenges/weather-observation-station-18/problem

2. 정답 코드:

SELECT
    ROUND((c-a) + (d-b), 4)
FROM (SELECT
        MIN(LAT_N) AS a,
        MIN(LONG_W) AS b,
        MAX(LAT_N) AS c,
        MAX(LONG_W) AS d
    FROM STATION
    ) AS minmax;
SELECT
    ROUND((MAX(LAT_N)-MIN(LAT_N)) + (MAX(LONG_W)-MIN(LONG_W)), 4)
FROM STATION;

# 더 간단한 버전!

2차원에서의 맨해튼 거리 공식
|x1-x2|+|y1-y2|

Python 코드카타 (https://github.com/heeso0908/codekata.git)

Q49. 두 개 뽑아서 더하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/68644

2. 정답 코드:

def solution(numbers):
    answer = []
    temp = []
    for idx, i in enumerate(numbers):
        for j in numbers[idx+1:]:
            if i+j not in temp:
                temp.append(i+j)
    answer = sorted(temp)            
    return answer
for idx, i in enumerate(numbers) 구문을 사용해서 첫번째 for 문에서는 idx 값도 같이 가져와야 한다!
그런 다음 두번째 for 문에서 idx+1 부터 슬라이싱해서 j를 구해주고,
i+j를 더한 값을 temp 리스트에 중복이 되지 않게(not in 사용) 넣고, sorted(오름차순 정렬)를 해주면 된다!

라이브 세션) 통계 실습 6일차: 

⚠️ 대표본과 정규성 — 반드시 알아야 할 개념 (중심극한정리, CLT)

- t-검정, ANOVA 등 평균을 비교하는 모든 모수적 검정은 표본 크기가 충분히 크면, 원래 데이터가 정규분포가 아니더라도 사용할 수 있다.

구분 Shapiro-Wilk / Q-Q Plot t-검정 / ANOVA (F 검정)
검정 대상 원래 데이터의 분포 표본평균의 분포
정규성 필요 대상 개별 관측값 집단 평균
  • Shapiro-Wilk, Q-Q Plot은 개별 데이터가 정규분포인지 검정
  • 그러나 t-검정과 ANOVA는 집단 평균을 비교
  • 중심극한정리(CLT): 표본 크기가 충분하면, 원래 분포와 관계없이 표본평균의 분포가 정규분포에 근사!
  • 따라서 Shapiro-Wilk가 기각되더라도 표본이 크면 t-검정/ANOVA는 유효하다.

- 원래 분포에 따라 필요한 표본 크기가 다르다!

CLT는 "언젠가 수렴한다"는 정리이지, "n ≥ 30이면 항상 충분하다"는 보장이 아니다. 원래 분포가 정규분포에서 멀수록, CLT가 작동하기 위해 더 큰 n이 필요하다.

원래 분포 형태 예시 CLT 충분한 n 이유
대칭 + 가벼운 꼬리 균등분포 n ≥ 10~15 이미 대칭이라 평균 분포가 빠르게 수렴
약한 비대칭 약간 치우친 연속분포 n ≥ 15~20 왜도가 작아 수렴이 빠름
중간 비대칭 지수분포, 포아송 n ≥ 30 통상적 기준 (대부분의 교재 권장)
강한 비대칭 로그정규, 파레토 n ≥ 100~200+ 긴 꼬리(heavy tail)가 평균을 불안정하게 만듦
이봉분포 / 극단적 이상치 혼합분포 비모수 검정 권장 아래 참고

 

※ 위 표의 n 기준은 각 집단별 표본 크기이며, t-검정과 ANOVA 모두 동일하게 적용된다. 로그정규(σ ≥ 2)나 파레토(α ≈ 2) 같은 극단적 분포는 n = 1,000에서도 수렴이 불충분할 수 있다 (Akinshin, 2023; Salazar, 2020). 이런 경우 비모수 검정이 더 안전!

 

 

 

⚠️ "이상치가 많으면 비모수" — 왜? 이상치가 많은 경우, CLT 자체는 대표본에서 여전히 작동한다 (표본평균의 분포는 정규에 수렴). 문제는 평균이라는 통계량 자체의 대표성이다. 이상치가 많으면 평균이 데이터의 중심을 제대로 반영하지 못하므로, 평균을 비교하는 t-검정/ANOVA의 결과 자체가 의미를 잃는다. 비모수 검정(Mann-Whitney, Kruskal-Wallis)은 중앙값/순위 기반이라 이상치에 강건(robust)하다.

 

 

객관적 판단 근거: 왜도(skewness)

CLT 수렴 속도를 결정하는 핵심 요인은 왜도(skewness) 이다 (Berry-Esseen 정리). 왜도 분류 기준은 Bulmer(1979) Principles of Statistics 에서 유래

from scipy.stats import skew
print(f"왜도: {skew(data):.2f}")  # 0에 가까울수록 대칭

 

|skew| 분류 (Bulmer, 1979) CLT 실무 기준
< 0.5 거의 대칭 n ≥ 15~20이면 충분
0.5 ~ 1.0 중간 비대칭 n ≥ 30 권장
> 1.0 강한 비대칭 n ≥ 100+ 또는 비모수 고려

 

※ CLT 표본 크기 기준은 OpenIntro Statistics(Diez et al.), Moore/McCabe 등 주요 교재의 권장 사항을 종합한 것이다. Smith & Wells(2006) 시뮬레이션에 따르면 |skew| > 1.0인 분포는 n = 175에서도 수렴이 불안정할 수 있다.

 

 

보조 지표: 첨도(kurtosis)

첨도는 CLT 수렴 속도의 주요 요인은 아니지만(Berry-Esseen 정리는 왜도 기반), 꼬리 두께를 나타내므로 이상치 빈도를 간접적으로 파악하는 데 유용하다.

from scipy.stats import kurtosis
print(f"초과첨도: {kurtosis(data):.2f}")  # 0이면 정규분포와 유사한 꼬리
  • scipy의 kurtosis()는 초과첨도(excess kurtosis)를 반환 (정규분포 = 0)
  • 초과첨도 > 2~3 → 꼬리가 두꺼움 → 이상치 빈도 증가 → 평균 불안정
  • 초과첨도 > 7 → 극단적 (West, Finch & Curran, 1996) → 비모수 고려
  • 주의: 첨도만으로 CLT 적용 여부를 판단하지 말고, 왜도 + Q-Q Plot과 함께 종합 판단

 

실무 요약: Q-Q Plot으로 분포 형태를 눈으로 확인하고, skew()와 kurtosis()로 수치를 확인한 뒤, 위 기준과 표본 크기를 함께 고려하여 판단한다.

 

 

Shapiro-Wilk의 역설

역설적으로, 대표본(n > 100)에서는 Shapiro-Wilk가 너무 민감해진다. 실무적으로 무의미한 아주 미세한 비정규성까지 탐지하여 거의 모든 실제 데이터를 기각한다. 따라서 대표본에서 Shapiro-Wilk p < 0.05라는 결과만으로 비모수 검정으로 전환하는 것은 오히려 검정력(power)을 낭비하는 결과를 낳을 수 있다.

결론: 정규성 검정 결과는 표본 크기와 함께 해석해야 한다. 소표본에서 기각 → 비모수 검정 | 대표본에서 기각 → Q-Q Plot으로 분포 형태를 확인 후 판단 본 교안의 전략: 학습 목적으로 소표본(n=20~30) 시나리오를 다루므로, Shapiro-Wilk 기각 시 Kruskal-Wallis로 분기하는 보수적 전략을 따른다. 실무에서 대표본을 다룰 때는 위 기준을 참고하여 유연하게 판단해야 함!


MDE 중요!

2) A/B 테스트

(1) 주요 용어 정리

용어 영어 정의
A/B 테스트 A/B Test 두 가지(또는 그 이상) 버전을 비교하는 무작위 대조 실험
대조군 Control Group 기존 버전을 경험하는 집단
실험군 Treatment Group 새로운 버전을 경험하는 집단
무작위 배정 Random Assignment 실험 참가자를 무작위로 대조군/실험군에 배정하는 과정
전환율 Conversion Rate 목표 행동(구매, 클릭 등)을 수행한 비율
검정력 Statistical Power (1−β) 실제 차이가 있을 때 이를 탐지할 확률
MDE Minimum Detectable Effect 주어진 검정력·유의수준 하에서 탐지 가능한 최소 효과 크기
1종 오류 (α) Type I Error (False Positive) 차이가 없는데 있다고 잘못 판단할 확률
2종 오류 (β) Type II Error (False Negative) 차이가 있는데 없다고 놓칠 확률

(2) 실험 설계 — 표본 크기 산정

A/B 테스트에서는 실험 전에 필요한 표본 크기를 산정한다.

필요한 입력값:

항목 기호 일반적 설정 설명
유의수준 α 0.05 1종 오류 허용 확률
검정력 1−β 0.80 실제 차이 탐지 확률
MDE δ 비즈니스 결정 탐지하고 싶은 최소 효과 크기
기준 전환율 p₀ 현재 데이터 현재(대조군) 전환율

 

MDE가 작을수록 더 많은 표본이 필요하다.
검정력이 높을수록 더 많은 표본이 필요하다.

 


라이브 세션) 머신러닝 이론 2일차: 머신러닝과 scikit-learn 소개

1) scikit-learn

scikit-learn에서 모든 모델(알고리즘)은 baseestimator?를 상속 받고 있어서 같은 패턴으로 쓸 수 있다??

 

2) 학습 (fit) : 모의고사 문제(X_train), 모의고사 답지(y_train)

3) 예측 (predict) : 수능 문제(X_test) 에 대한 답을 OMR 카드(pred)에 기입

4) 평가 (score) : 수능 답지(y_test), OMR 카드(pred) - 정확도 계산

관습적으로, 문제(feature)는 여러 개 X(대문자), 정답은 하나 y(소문자)

→ feature가 여러 개라서 → feature는 행렬, target는 벡터


수능 문제 유출 = 데이터 누수


2) 모델 선정

똑같이 자른 다음에 모델만 바꿔서 검정해야 함!

평균 정확도랑 표준편차(=흔들림 정도 → 안정성 확보 여부) 비교!


3) GridSearchCV - 하이퍼파라미터 자동 탐색

하이퍼파라미터 = 사람이 직접 정해줘야 하는 설정 값

하이퍼파라미터 튜닝 = 값 조정!

GridSearchCV : 후보 값을 모두 넣으면, 교차검증으로 가장 좋은 조합을 자동으로 찾아준다!

하이퍼파라미터가 성능에 미치는 영향 = max_depth (중요!)

훈련 정확도와 검증 정확도의 차이가 크면 과적합 의심!


어제보다 더 긴 시간 동안 세션을 들은 하루였다ㅠㅡㅠ
오늘은 통계 마지막 날이었는데, 짧은 기간에 많은 내용을 다루다 보니 아직 완전히 이해되지 않은 부분도 있다. 연휴 기간 동안 충분히 복습하면서 개념을 놓치지 않도록 신경 써야겠다.
머신러닝은 오늘이 두 번째 세션이었는데, 아직 코드를 깊게 다루지 않아 지금까지는 따라갈 만한 수준이다. 하지만 앞으로 난이도가 높아질 것을 생각하면, 매 세션마다 더 집중해서 들어야 할 것 같다...
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함