내배캠_Data_3기/TIL

240805_통계학 기초 1주차 데이터의 분석과 통계

케일라(Data_3기) 2024. 8. 5. 20:05

통계학 기초 1주차

1-1 데이터 분석에 있어서 통계가 중요한 이유

데이터 분석하고 이를 바탕으로 결정을 내릴 수 있다.

  • 데이터 분석에서 통계는 데이터를 이해하고 해석하는 데 중요한 역할을 한다.
  • 데이터를 요약하고 패턴을 발견할 수 있다
  • 추론을 통해 결론을 도출화는 과정을 돕는다.
  • 즉, 데이터 기반의 의사결정을 내릴 수 있다.
  • 결국 기업이 보다 현명란 결정을 내리고 수익을 창출하기 위해 필요하다.

 

1-2 기술통계와 추론통계

1) 기술통계 : 데이터를 요약하고 설명하는 통계 방법

  • 주로 평균, 중앙값, 분산, 표준편차 등을 사용한다.
  • 데이터를 특정 대표값으로 요약 ex)회사의 매출 데이터를 요약하기 위해 평균 매출, 매출의 표준편차 등을 계산
  • 데이터에 대한 대략적인 특징을 간단하고 쉽게 알 수 있음
  • 단, 데이터 중 예외(이상치)라는게 항상 존재할 수 있고 데이터의 모든 부분을 확인할 수 있는 것은 아님

평균(Mean) : 데이터의 평균을 나타내는 값

  • 모든 데이터를 더한 후 데이터의 개수로 나누어 계산한다.
  • 이는 데이터의 일반적인 경향을 파악하는데 유용하다.

중앙값(Median) : 데이터셋을 크기 순서대로 정렬했을 때 중앙에 위치한 값.

  • 이상치(예외적인 값들)에 영향을 덜 받기 때문에 데이터의 중심 경향을 나타내는 또 다른 방법.

분산(Variance) : 데이터 값들이 평균으로부터 얼마나 떨어져 있는지를 나타내는 척도로, 데이터의 흩어짐 정도를 측정한다.

  • 분산이 크면 데이터가 넓게 퍼져 있고, 작으면 데이터가 평균에 가깝게 모여 있음을 의미.
  • 분산을 구하는 방법은 각 데이터 값에서 평균을 뺀 값을 제곱한 후, 이를 모두 더하고 데이터의 개수로 나누는 것.

표준편차(Standard Deviation) : 데이터 값들이 평균에서 얼마나 떨어져 있는지를 나타내는 통계적 척도로, 분산의 제곱근을 취하여 계산한다.

  • 데이터의 변동성을 측정하여, 값이 클수록 데이터가 평균으로부터 더 넓게 퍼져 있음을 의미.

표준편차와 분산의 관계

  • 분산과 표준편차는 동일하게 데이터의 변동성을 측정하고는 두 가지 주요 척도이다.
  • 두 개념은 밀접하게 연관되어 있으며, 표준편차는 분산의 제곱근이다.
  • 분산은 데이터 값과 평균의 차이를 제곱하여 평균을 낸 값이기 때문에 제곱 단위로 표현되지만, 표준편차는 다시 제곱근을 취하여 원래 데이터 값과 동일한 단위로 변환한다.

2)추론통계 : 표본 데이터를 통해 모집단의 특성을 추정하고 가설을 검정하는 통계 방법.

  • 주로 신뢰구간, 가설검정 등을 사용한다.
  • 데이터의 일부를 가지고 데이터 전체를 추정하는 것이 핵심
  • ex)일부 고객의 설문조사를 통해 전체 고객의 만족도를 추정

 신뢰구간(Confidenc Interval) : 모집단의 평균이 특정 범위 내에 있을 것이라는 확률을 나타낸다.

  • 일반적으로 95% 신뢰구간이 사용되며, 이는 모집단 평균이 95%확률로 이 구간 내에 있음을 의미.

 가설검정(Hypothesis Testing) : 모집단에 대한 가설을 검증하기 위해 사용된다. 일반적으로 두 가지 가설이 있다.

  • 귀무가설(H0)은 검증하고자 하는 가설이 틀렸음을 나타내는 기본 가설(변화가 없다, 효과가 없다 등)
  • 대립가설(H1)은 귀무가설의 반대 가설로 주장하는 바를 나타낸다(변화가 있다, 효과가 있다 등)
  • p-value를 통해 귀무가설을 기각할지 여부를 결정한다.

 

1-3 다양한 분석 방법

1)위치추청 : 데이터의 중심을 확인하는 방법

  • 평균, 중앙값이 대표적인 위치 추정 방법이다.
  • ex) 학생들의 시험 점수에서 평균 점수, 중간 점수를 계산
더보기

data = [85, 90, 78, 92, 88, 76, 95, 89, 84, 91]
mean = np.mean(data)
median = np.median(data)

print(f"평균: {mean}, 중앙값: {median}")

2)변이추정 : 데이터들이 서로 얼마나 다른지 확인하는 방법

  • 분산, 표준편차, 범위(range) 등을 사용한다.

 범위 : 데이터셋에서 가장 큰 값과 가장 작은 값의 차이를 나타내는 간단한 분포의 측도이다.

  • 범위를 통해 데이터가 어느 정도의 변동성을 가지는지 쉽게 파악할 수 있다.
  • 범위는 계산이 간단하여 기본적인 데이터 분석에서 자주 사용된다.
  • 수식 : 범위(R) = 최대값 - 최소값
더보기

variance = np.var(data)
std_dev = np.std(data)
data_range = np.max(data) - np.min(data)

print(f"분산: {variance}, 표준편차: {std_dev}, 범위: {data_range}")

3) 데이터 분포 탐색 : 데이터의 값들이 어떻게 이루어져 있는지 확인하기

  • 히스토그램과 상자 그림(Box plot)은 데이터의 분포를 시각적으로 표현하는 대표적인 방법이다.
더보기

plt.hist(data, bins=5)
plt.title('histogram')
plt.show()

plt.boxplot(data)
plt.title('boxplot')
plt.show()

4) 이진 데이터와 범주 데이터 탐색 : 데이터들이 서로 얼마나 다른지 확인하는 방법

  • 최빈값(개수가 제일 많은 값)을 주로 사용한다.
  • 파이그림과 막대 그래프는 이진 데이터와 범주 데이터의 분포를 표현하는 대표적 방법이다.
더보기

satisfaction = ['satisfaction', 'satisfaction', 'dissatisfaction', 
'satisfaction', 'dissatisfaction', 'satisfaction', 'satisfaction', 
'dissatisfaction', 'satisfaction', 'dissatisfaction']
satisfaction_counts = pd.Series(satisfaction).value_counts()

satisfaction_counts.plot(kind='bar')
plt.title('satisfaction distribution')
plt.show()

 

5)상관관계 : 데이터들끼리 서로 관련이 있는지 확인하는 방법

  • 상관계수를 계산해서 -1이나 1에 가까워지면 강력한 상관관계를 가진다.
  • -0.5나 0.5를 가지면 중간정도의 상관관계를 가진다.
  • 0에 가까울수록 상관관계가 없다.
더보기

study_hours = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
exam_scores = [95, 90, 85, 80, 75, 70, 65, 60, 55, 50]
correlation = np.corrcoef(study_hours, exam_scores)[0, 1]

print(f"공부 시간과 시험 점수 간의 상관계수: {correlation}")

plt.scatter(study_hours, exam_scores)
plt.show()

6)인과관계와 상관관계의 차이

인과관계는 상관관계와는 다르게 원인, 결과가 분명해야한다.

상관관계는 두 변수 간의 관계를 나타내며, 인과관계는 한 변수가 다른 변수에 미치는 영향을 나타낸다.

 

7)두 개 이상의 변수 탐색

여러 데이터들끼리 서로 관련이 있는지 확인

  • 다변량 분석은 여러 변수 간의 관계를 분석하는 방법이다.
  • ex) 여러 마케팅 채널의 광고비와 매출 간의 관계 분석
더보기

data = {'TV': [230.1, 44.5, 17.2, 151.5, 180.8],
        'Radio': [37.8, 39.3, 45.9, 41.3, 10.8],
        'Newspaper': [69.2, 45.1, 69.3, 58.5, 58.4],
        'Sales': [22.1, 10.4, 9.3, 18.5, 12.9]}
df = pd.DataFrame(data)

sns.pairplot(df)
plt.show()

df.corr()

 

# heatmap까지 그린다면
sns.heatmap(df.corr())