내일배움 본캠프

[내일배움 본캠프] 결측치 제거, 채움 & K-NN

hyeon-ji 2026. 6. 1. 20:37

☆ To do list 

  • AI 진단퀴즈 풀기
  • 코드카타 2문제 풀기
  • 데이터 전처리 & 시각화 강의 3주차 수강하기
  • 라이브 세션 수강하기(15:00~)
  • TIL 작성 및 제출

🤖 에이타니 

이상치가 나타났을 경우 이상치의 영향을 제거하지 못하고, 평균이 이상치의 영향을 받을 수 있다는 거를 생각하면서 아 이건 틀렸지! 하며 골라버렸다.

잠이 덜 깼나 허허..

 

아무튼 답은 'B'번이다. 평균값으로 이상치를 대체하게 될 경우 데이터의 분산을 인위적으로 감소시킨다. 따라서 변동성이 작아 보일 수 있는 문제가 발생한다. 즉, 변동성을 과소평가하게 되는 문제점이 발생한다.
'A' : 데이터의 중앙값은 크게 변하지 않는다. 

'D' : 평균은 수치형 데이터에서 사용이 가능하므로 범주형에서는 적용하기 어렵다.


🔐 CodeKata

 

● 평균 구하기

def solution(arr):
    answer = sum(arr) / len(arr)    # arr의 합을 구하고 arr의 길이로 나누어 평균 구하기
    return answer
arr = [1, 2, 3, 4]
solution(arr)

 

● 자릿수 더하기

def solution(n):
    answer = 0
    nstr = str(n)

    for i in range(len(nstr)):
      answer += int(nstr[i])

    return answer

print(solution(123))

 

→ 처음에 코드를 입력했을 때 코드가 실행되지 않았었다. print문을 return과 같은 줄에 맞춰 작성한 것이 문제였다.. 언제나 기본이 중요..! 코드 입력할 때 줄 위치를 잘 확인하며 작성해야겠다..ㅎ


💻 Python

● describe() 메서드 : 데이터의 분포와 중심경향을 한눈에 파악할 수 있는 핵심 메서드. 평균, 표준편차, 최솟값, 최댓값, 사분위수 등 기초 통계를 제공한다.

● count : 결측치가 아닌 데이터 개수
● unique : 고유한 값의 개수(카테고리 수)
● top : 최빈값
● freq : 최빈값의 빈도

 

▶ 결측지

 

● 결측치 제거

주로 pandas의 dropna()를 이용하여 제거한다.

import pandas as pd

df = pd.DataFrame({
     'A': [1, 2, Nan],
     'B': [4, Nan, 6]
})

print(df.dropna())

'''
    A    B
0  1.0  4.0     <-- 출력
'''

df = pd.dropna(axis=1)   '''<-- 컬럼 삭제'''

 

● 결측치 채우기

 

○ 평균값 : 정규분포에 가까운 연속형 변수

import pandas as pd

df = DataFrame({
     'A': [1, 2, Nan, 4]
})

df['A'] = df['A'].fillna(df['A'].mean())

 

중위수 : 이상치가 많거나 치우친 분포

df['A'] = df['A'].fillna(df['A'].median())

 

최빈값 : 범주형 변수

df['A'] = df['A'].fillna(df['A'].mode()[0])

 

특정값 : 비즈니스 로직상 의미가 있는 값

df.fillna(0)
--> 0으로 값 채움

 

예측값 : 다른 변수들로 예측한 값

 

● 시간 순서가 있는 데이터 결측치 채우는 방법

Forward Fill

→ 시계열 데이터에서 값이 서서히 변할 때 사용한다. 예시로 설문조사에서 "이전 답변과 동일"의 의미일 때 사용한다.

Backward Fill

→ 미래에 관측된 값이 과거의 결측 구간에도 적용되었으므로 가능성이 높을 때 사용한다.

 

▶추가 학습

 

● 왜도

→ 데이터가 이루고 있는 분포의 좌우 치우침 정도를 말한다.

 

● 첨도

→ 데이터의 분포가 평균에 얼마나 몰려있는지, 꼬리가 얼마나 두꺼운지를 말한다.

 

 

● K-NN

→ 결측치의 값을 가장 가까운 즉, feature similarity를 적용하면서 결측치를 처리한다.

 

○ 분유해야 할 record로부터 "근접"한 K개의 record를 다수결의 원칙으로 class를 결정하는 방법.

"근접"을 측정하기 위해서는 "유클리드 거리"를 이용한다.

유클리드 거리

 

장점 : 간단하다, 분포 가정이 필요하지 않다. 통계적 모델을 정의하지 않고 변수들 사이에서 복잡한 상호작용을 수집하여 정확한 선능을 보여준다.

 

  >

  • 예측변수의 수 a가 증가함에 따라 학습 세트로 필요한 record의 수가 기하급수적으로 증가한다.
  • 예측변수의 수가 많아지면 "차원의 저주"의 영향을 받는다.
  • 대용량 학습세트에서, 모든 이웃까지의 거리를 계산하는데 많은 시간이 걸린다.
  • 데이터가 새롭게 추가되면 재계산이 필요하다.

차원의 저주(curse of dimensionality) : 차원이 낮을 때 일어나지 않던 문제들이 높은 차원에서 데이터를 분석하거나 구조화할 때 나타나는 현상. 변수의 수가 증가함에 따라(차원이 증가함에 따라) 일반화된 모델을 얻기 위해 요구되는 데이터의 수가 기하급수적으로 증가하는 현상을 말한다. 


아침에 노트북이 갑자기 심하게 느려져서 아찌저찌 다른 컴퓨터로 출석체크하고 zep에 접속했지만,, 아무것도 할 수 없었다.. 최대한 노트북이 멀쩡해질 때까지 기다려 볼까 했는데 멀쩡해지지 않아서 매니저님께 말씀드리고 내배캠 119로 기기대여 신청 후 최대한 지금 할 수 있는 걸 위주로 하는 걸로!

데이터 시각화&전처리 3주차 강의를 수강하고 라이브세션을 들으며 데이터 전처리하는 방법과 시각화하는 방법에 대해 배웠다. 오늘은 데이터를 전처리하는 방법 위주로 배웠고, 내일은 시각화를 하는 방법 위주로 학습을 진행할 것 같다!

 

오늘부터 통계와 데이터 관련해서 추가 학습을 해볼까 마음을 먹고 K-NN에 대해 알아보았다. K-NN을 간단하게 말하자면 "새로운 데이터가 들어왔을 때 가장 가까운 K개의 데이터를 보고 분류하거나 예측하는 알고리즘"이다.

 

내일은 노트북이 조금은 멀쩡하길 바라며.. 오늘을 마무리해본ㄷr..

노트북아 대여한 기기 올 때까지만 버티렴..