티스토리 뷰
SQL 코드카타
Q144. Weather Observation Station 12
1. 문제 링크: https://www.hackerrank.com/challenges/weather-observation-station-12/problem
2. 정답 코드:
SELECT DISTINCT CITY
FROM STATION
WHERE LEFT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u')
AND RIGHT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u');
Q145. Higher Than 75 Marks
1. 문제 링크: https://www.hackerrank.com/challenges/more-than-75-marks/problem
2. 정답 코드:
SELECT Name
FROM STUDENTS
WHERE Marks > 75
ORDER BY RIGHT(Name, 3), ID;
Q168. Binary Tree Nodes
1. 문제 링크: https://www.hackerrank.com/challenges/binary-search-tree-1/problem
2. 정답 코드:
SELECT N,
CASE
WHEN P IS NULL THEN 'Root'
WHEN N IN (SELECT DISTINCT P FROM BST) THEN 'Inner'
ELSE 'Leaf'
END AS node_type
FROM BST
ORDER BY N;
Python 코드카타 (https://github.com/heeso0908/codekata.git)
Q51. 푸드 파이트 대회 ★
1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/134240
2. 정답 코드:
def solution(food):
left = ''
for i in range(1, len(food)):
left += str(i) * (food[i]//2)
return left + '0' + left[::-1]
0을 기준으로 좌우 대칭구조! → left + 0 + left[::-1]
for 문 사용해서 left 만들어야 하는데, range(1, len(food))로 해줘야 함
food[i]//2 (몫) 만큼 str(i) 반복!
라이브 세션) 머신러닝 이론 3일차: 전처리, 분류 모델 평가지표
1) 전처리(Preprocessing)

2) 인코딩(Encoding)
: 범주형 데이터의 글자(문자열)를 직접 계산할 수 없음 → 숫자로 인코딩해서 계산!
레이블 인코딩 vs 원-핫 인코딩
레이블 인코딩은 숫자 크기에 따라 중요도를 다르게 인식할 수 있어서, 원-핫 인코딩을 많이 쓰는 추세(차원을 늘려서 관리)


+ 벡터화 (리스트=배열로 만들기)
CountVectorizer 사용
단어 사전을 만들어서 숫자로 각 단어들을 바꿔줌
3) 스케일링
StandardScaler : 평균과 표준편차를 이용해 스케일링을 해서 이상치에 민감
RobustScaler : 중앙값과 IQR을 가지고 스케일링을 해서 이상치에 덜 민감 (이상치 없는 IQR 50%만 가지고 하니까)
MinMaxScaler : 거리 기반 모델(ex. KNN)에서 잘 작동, Min=0 / Max=1 로 간주하여 나머지 숫자는 비율로서 표현

4) 정규화(Normalization)
원래 벡터는 크기가 있는 방향 이지만,
정규화는 길이(크기) 영향을 지우고, 방향(패턴)만 비교! (길이를 모두 1로 맞추기)
→ 영화 추천처럼 크기보다는 패턴(취향)이 중요한 경우에는 정규화!!




5) 전처리 단계에서의 데이터 누수 방지 → Pipeline
train 데이터에서만 fit을 하고, test 데이터에서만 transform을 한다!
→ Pipeline


6) 불균형 데이터
: 한 클래스가 극소수인 상황 (ex. 사기, 암 환자, 스팸)
→ 정확도가 높아지므로 주의!
7) 지표
Positive(양성) : 내가 찾고 싶은(관심있는) 대상
Negative(음성) : 나머지

recall: 양성을 얼마나 잡았냐, 내가 관심이 있는 것을 놓치지 않았냐?
precision: 양성 중 진짜 양성? 헛발질 안 했나?
F1: trade-off (저울질) → recall과 precision 균형 맞추기
ROC: 기준값을 바꿔도 Positive랑 Negative를 잘 구분하나?
PR: 불균형한 데이터에서도 Positive를 잘 찾나?
8) 혼동행렬(Confusion Matrix)



여기서 0과 1은 각각 클래스이다.

(1) support 값을 확인해서 각 클래스별 비유 확인 → 균형/불균형 데이터 여부 확인
(2) precision / recall / F1 / support 값 확인
(3) macro avg, weighted avg 간에 차이가 있는지 없는지 확인
(4) 마지막으로 confusion matrix 확인
Recall (실제 양성인 것 중에서 얼마나 양성이라고 예측했는지 비율) = TP / (TP + FN)
Precision (양성이라고 예측한 것 중에서 실제 얼마나 양성인지 비율) = TP / (TP + FP)
-> Recall과 Precision 간 줄다리기(Trade-off)를 할 수 밖에 없는게 분자는 똑같은데 분모에서 FN or FP 차이가 나니까 결과 값이 반대로 나올 수 밖에
Recall을 볼건지, Precision을 볼건지 어떻게 정할까? → 비용(Cost)를 봐서 정하기
근데 둘 다 중요하면? → F1 값 보기!
precision -> 오탐지 비율 줄일때
recall -> 누락 비율 줄일때
F1 -> 조화평균
macro/balanced/weighted -> ??


9) 임계값(Threshold)
: 보통은 0.5를 기준으로 양성/음성 판단 → 임계값 수치 조정도 가능함!
임계값 조절 = 결정 or 정책을 튜닝?
임계값이 낮아지니까 recall이 올라감
임계값이 높아지니까 precision이 올라감
임계값을 바꾼다고 해서 모델이 재학습을 할 필요는 없음
10) ROC & AUC

어떠한 하나를 뽑았을 때 양성인지 음성인지 확률 → AUC
11) PR 곡선(Precision - Recall Curve)
오른쪽으로 갈수록 많이 잡고 정확하게 잡는다

'내일배움캠프 데이터 분석' 카테고리의 다른 글
| 41일차) 내일배움캠프 데이터 분석 TIL - 머신러닝(6) (0) | 2026.02.23 |
|---|---|
| 40일차) 내일배움캠프 데이터 분석 TIL - 머신러닝(5), QCC (0) | 2026.02.20 |
| 38일차) 내일배움캠프 데이터 분석 TIL - 머신러닝(3) (0) | 2026.02.13 |
| 37일차) 내일배움캠프 데이터 분석 TIL - 통계(7), 머신러닝(2) (0) | 2026.02.12 |
| 36일차) 내일배움캠프 데이터 분석 TIL - 통계(6), 머신러닝(1) (0) | 2026.02.11 |
- Total
- Today
- Yesterday
- 데이터시각화
- 파이썬입문
- 판다스
- git
- 파이썬
- 텍스트분석
- 내일배움캠프
- 태블로
- Tableau
- github
- Til
- 머신러닝
- Python
- 데이터분석
- 코딩기초
- 중학생코딩
- SQL
- 데이터분석입문
- 프로그래밍입문
- 코드카타
- 비전공자코딩
- GoogleColab
- 통계
- 구글코랩
- 코딩처음
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
