QCQA_1기

TIL_7W5D_통계&머신러닝 개인과제_필수문제

story3395 2025. 1. 31. 20:38

breast_cancer.csv
0.12MB
[QAQC_1기]_통계_&_머신러닝_개인_과제_ipynb의_사본.ipynb
0.05MB

 

 

 

 


🔥 필수 1. 기초 통계


  • Breast Cancer 데이터셋의 종양 특성들을 카테고리별로 진단 결과(diagnosis)에 따라 분석해보세요.
    1. 크기/형태 관련 특성의 기초통계
      • radius_mean, perimeter_mean, area_mean에 대한 진단별 평균과 중앙값을 구하세요.
    2. 표면 특성의 기초통계
      • texture_mean, smoothness_mean에 대한 진단별 평균과 중앙값을 구하세요.
    3. 형태 복잡도 특성의 기초통계
      • compactness_mean, concavity_mean, concave points_mean에 대한 진단별 평균과 중앙값을 구하세요.
    4. 구조적 특성의 기초통계
      • symmetry_mean, fractal_dimension_mean에 대한 진단별 평균과 중앙값을 구하세요.
  • 각 카테고리에 속한 특성들의 평균과 중앙값을 구하고 해석해주세요.
  • 유의 사항
    • 결과는 소수점 둘째자리까지 표현해주세요.
    • 각 카테고리별로 간단한 해석을 덧붙여주세요.
# 필수 1. 기초 통계

# diagnosis 컬럼을 기준으로 양성(B)과 악성(M) 종양으로 분리
B_df = df[df['diagnosis'] == 'B']
M_df = df[df['diagnosis'] == 'M']

# 진단별 평균과 중앙값 계산 함수
def calculate_statistics_for_features(df, features):
    stats = {}
    for feature in features:
        mean_value = df[feature].mean()
        median_value = df[feature].median()
        stats[feature] = {'mean': mean_value, 'median': median_value}
    return stats

# 각 특성 리스트 정의
size_shape_features = ['radius_mean', 'perimeter_mean', 'area_mean']
surface_features = ['texture_mean', 'smoothness_mean']
complexity_features = ['compactness_mean', 'concavity_mean', 'concave points_mean']
structural_features = ['symmetry_mean', 'fractal_dimension_mean']

# 각 특성 리스트에 대해 계산 및 출력
categories = [
    ("크기/형태", size_shape_features),
    ("표면 특성", surface_features),
    ("형태 복잡도 특성", complexity_features),
    ("구조적 특성", structural_features)
]

for category_name, features in categories:
    print(f"{category_name} 통계량 :")
   
    # 양성(B) 종양 통계
    B_stats = calculate_statistics_for_features(B_df, features)
    print("양성(B) 종양:")
    for feature, stats in B_stats.items():
        print(f"{feature}: 평균 {stats['mean']:.2f} , 중앙값 {stats['median']:.2f}")
   
    # 악성(M) 종양 통계
    M_stats = calculate_statistics_for_features(M_df, features)
    print("\n악성(M) 종양:")
    for feature, stats in M_stats.items():
        print(f"{feature}: 평균 {stats['mean']:.2f} , 중앙값 {stats['median']:.2f}")
   
    print("\n" + "-"*40)

 

필수 1 답안

  1. 크기/형태 관련 특성 통계량 :
    • 양성(B) 종양 :
      • [radius]_mean: 평균 12.15 , 중앙값 12.20
      • [perimeter]_mean: 평균 78.08, 중앙값 78.18
      • [area]_mean: 평균 462.79, 중앙값 458.40
    • 악성(M) 종양 :
      • [radius]_mean: 평균 17.46 , 중앙값 17.33
      • [perimeter]_mean: 평균 115.37, 중앙값 114.20
      • [area]_mean: 평균 978.38, 중앙값 932.00
    • 해석 :
      • 악성 종양은 양성 종양보다 반지름(radius),둘레(perimeter),면적(area)가 큰 경향을 보이며, 이를 통해 악성 종양이 더 발전된 상태일 가능성이 높다는 것을 알 수 있다.
  2. 표면 관련 특성 통계량 :
    • 양성(B) 종양 :
      • [texture]_mean: 평균 17.91 , 중앙값 17.39
      • [smoothness]_mean: 평균 0.09, 중앙값 0.09
    • 악성(M) 종양 :
      • [texture]_mean: 평균 21.60 , 중앙값 21.46
      • [smoothness]_mean: 평균 0.10, 중앙값 0.10
    • 해석 :
      • 악성 종양은 양성 종양에 비해 질감(texture)이 더 거칠고, 매끄러움 정도(smoothness)가 약간 더 높다는 특징을 보인다. 이는 악성 종양이 더 복잡하고, 세포의 불규칙성이 더 클 수 있다는 가능성을 나타낼 수 있다.
  3. 형태 복잡도 관련 특성 통계량 :
    • 양성(B) 종양 :
      • [compactness]_mean: 평균 0.08 , 중앙값 0.08
      • [concavity]_mean: 평균 0.05, 중앙값 0.04
      • [concave points]_mean: 평균 0.03, 중앙값 0.02
    • 악성(M) 종양 :
      • [compactness]_mean: 평균 0.15 , 중앙값 0.13
      • [concavity]_mean: 평균 0.16, 중앙값 0.15
      • [concave points]_mean: 평균 0.09, 중앙값 0.09
    • 해석 :
      • 악성 종양은 양성 종양에 비해 형태가 더 복잡하고 불규칙적이며, 밀집도(compactness)와 오목성(concavity)이 더 뚜렷하게 나타난다. 특히, 오목성 및 오목한 점(concave points)들이 더 많이 관찰되며, 이는 악성 종양이 세포와 조직의 형태가 불규칙하고 비정상적이라는 특징을 나타낸다.
  4. 구조적 특성 통계량 :
    • 양성(B) 종양 :
      • [symmetry]_mean: 평균 0.17 , 중앙값 0.17
      • [fractal_dimension]_mean: 평균 0.06, 중앙값 0.06
    • 악성(M) 종양 :
      • [symmetry]_mean: 평균 0.19 , 중앙값 0.19
      • [fractal_dimension]_mean: 평균 0.06, 중앙값 0.06
    • 해석 :
      • 악성 종양은 양성 종양보다 약간 더 대칭적인 특성(symmetry)을 가지며, 프랙탈 차원(fractal_dimension)에서는 두 종양군 모두 비슷한 값을 보인다. 이는 악성 종양이 세포 구조에서 약간 더 대칭적인 형태를 가진다고 해석할 수 있지만, 프랙탈 차원은 양성과 큰 차이가 없어 복잡한 구조에서는 차이가 크지 않음을 나타낸다.

🔥 필수 2. 통계적 가설검정 1


  • Breast Cancer 데이터셋의 종양 특성들을 카테고리별로 분석하려 합니다. 각 카테고리에 속한 특성들에 대해 diagnosis(양성/악성)에 따른 독립표본 T-TEST를 진행해주세요.
    • 크기/형태 관련 특성의 분석
    • radius_mean, perimeter_mean, area_mean에 대한 t-test를 수행하세요.
    • 표면 특성의 분석
    • texture_mean, smoothness_mean에 대한 t-test를 수행하세요.
    • 형태 복잡도 특성의 분석
    • compactness_mean, concavity_mean, concave points_mean에 대한 t-test를 수행하세요.
    • 구조적 특성의 분석
    • symmetry_mean, fractal_dimension_mean에 대한 t-test를 수행하세요.
  • 가설검정 방법은 각 카테고리별로:
    • 귀무가설과 대립가설을 작성하세요.
    • t-score와 p-value를 구하세요.
    • 귀무가설의 채택/기각 여부를 판단하세요.
    • 해당 카테고리 내에서 어떤 특성이 악성 종양 판별에 가장 큰 영향을 미치는지 분석하세요.
# 필수 2. 통계적 가설검정 1

# diagnosis 컬럼을 기준으로 양성(B)과 악성(M) 종양으로 분리
B_df = df[df['diagnosis'] == 'B']
M_df = df[df['diagnosis'] == 'M']

# 독립표본 T-TEST 수행 함수
def perform_ttest(df1, df2, features):
    ttest_results = {}
    for feature in features:
        # 두 집단에 대한 T-test 수행
        t_stat, p_value = stats.ttest_ind(df1[feature], df2[feature])
        ttest_results[feature] = {'t-score': t_stat, 'p-value': p_value}
    return ttest_results

# 각 특성 리스트 정의
size_shape_features = ['radius_mean', 'perimeter_mean', 'area_mean']
surface_features = ['texture_mean', 'smoothness_mean']
complexity_features = ['compactness_mean', 'concavity_mean', 'concave points_mean']
structural_features = ['symmetry_mean', 'fractal_dimension_mean']

# 분석 수행
categories = [
    ("크기/형태", size_shape_features),
    ("표면", surface_features),
    ("형태 복잡도", complexity_features),
    ("구조적", structural_features)
]

# 분석 출력
for category_name, features in categories:
    print(f"{category_name} 관련 특성 분석 :")
   
    # T-TEST 결과 계산
    ttest_results_B = perform_ttest(B_df, M_df, features)
   
    for feature, results in ttest_results_B.items():
        t_stat = results['t-score']
        p_value = results['p-value']
       
        # 귀무가설과 대립가설 작성
        print(f"\n{feature}:")
        print(f"귀무가설(H₀): {feature}의 양성(B)과 악성(M) 간 차이가 없다.")
        print(f"대립가설(H₁): {feature}의 양성(B)과 악성(M) 간 차이가 있다.")
       
        # T-Score와 P-Value 출력
        print(f"t-score: {t_stat:.2f}")
        print(f"p-value: {p_value:.4f}")
       
        # 귀무가설 채택/기각 여부 판단
        if p_value < 0.05:
            print("→양성(B)과 악성(M) 간 유의미한 차이가 있음 (귀무가설 기각)")
        else:
            print("→양성(B)과 악성(M) 간 유의미한 차이가 없음 (귀무가설 채택)")
   
    print("\n" + "-"*40)  # 카테고리 구분을 위한 라인 추가

 

필수 2 답안

  1. 크기/형태 관련 특성 분석 :
    • 가설 :
      • H0: 양성(B)과 악성(M) 간 차이가 없다.
      • H1: 양성(B)과 악성(M) 간 차이가 있다.
    • 검정 결과 :
      • [radius]_mean: t-score -25.44 , p-value 0.00
      • [perimeter]_mean: t-score -26.41 , p-value 0.00
      • [area]_mean: t-score -23.94 , p-value 0.00
    • 해석 :
      • 양성(B)과 악성(M) 간 유의미한 차이가 있음(귀무가설 기각, 대립가설 채택)
  2. 표면 관련 특성 분석 :
    • 가설 :
      • H0: 양성(B)과 악성(M) 간 차이가 없다.
      • H1: 양성(B)과 악성(M) 간 차이가 있다.
    • 검정 결과 :
      • [texture]_mean: t-score -10.87 , p-value 0.00
      • [smoothness]_mean: t-score -9.15 , p-value 0.00
    • 해석 :
      • 양성(B)과 악성(M) 간 유의미한 차이가 있음(귀무가설 기각, 대립가설 채택)
  3. 형태 복잡도 관련 특성 분석 :
    • 가설 :
      • H0: 양성(B)과 악성(M) 간 차이가 없다.
      • H1: 양성(B)과 악성(M) 간 차이가 있다.
    • 검정 결과 :
      • [compactness]_mean: t-score -17.70 , p-value 0.00
      • [concavity]_mean: t-score -23.10 , p-value 0.00
      • [concave points]_mean: t-score -29.35 , p-value 0.00
    • 해석 :
      • 양성(B)과 악성(M) 간 유의미한 차이가 있음(귀무가설 기각, 대립가설 채택)
  4. 구조적 관련 특성 분석 :
    • 가설 :
      • H0: 양성(B)과 악성(M) 간 차이가 없다.
      • H1: 양성(B)과 악성(M) 간 차이가 있다.
    • 검정 결과 :
      • [symmetry]_mean: t-score -8.34 , p-value 0.00
      • [fractal_dimension]_mean: t-score 0.31 , p-value 0.7599
    • 해석 :
      • 양성(B)과 악성(M) 간 유의미한 차이가 없음(귀무가설 채택, 대립가설 기각)
    • 종합 결론:

크기/형태 관련 특성에서 영향력이 있는 특성은 [radius],[perimeter],[area]이다.

표면 관련 특성에서 영향력이 있는 특성은 [texture],[smoothness]이다.

형태 복잡도 관련 특성에서 영향력이 있는 특성은 [compactness],[concavity],[concave points]이다.

구조적 관련 특성에서 영향력이 있는 특성은 [symmetry]이고, [fractal_dimension]은 p-value가 0.05보다 크기 때문에 유의미한 차이가 없으며 상대적으로 덜 중요한 특성으로 보인다.

종양의 악성 여부를 판단하는 데 가장 중요한 역할을 하는 카테고리는 "크기/형태 관련 특성" "형태 복잡도 관련 특성"이다. (이 두 카테고리에서 악성 종양과 양성 종양 간의 차이가 가장 크고 유의미한 통계적 차이를 보였기 때문)

따라서, 악성 종양 여부를 판단하는 데 있어 "크기/형태" "형태 복잡도"특성이 가장 중요한 역할을 한다고 할 수 있다. "표면"과 "구조적 특성"은 보조적인 역할을 하며, 종양의 악성 여부를 판단하는 데 있어 중요한 추가적인 정보가 될 수 있다.

 


🔥 필수 3. 통계적 가설검정 2


  • Breast Cancer 데이터셋의 종양 특성들을 카테고리별로 분석하려 합니다. 각 카테고리에 속한 특성들의 측정치(mean, se, worst) 간 차이를 ANOVA로 분석해주세요.
    • 크기/형태 관련 특성의 분석
    • radius (mean, se, worst), perimeter (mean, se, worst), area (mean, se, worst)에 대한 측정치 간 차이를 ANOVA로 분석하세요.
    • 표면 특성의 분석
    • texture (mean, se, worst), smoothness (mean, se, worst)에 대한 측정치 간 차이를 ANOVA로 분석하세요.
    • 형태 복잡도 특성의 분석
    • compactness (mean, se, worst), concavity (mean, se, worst), - concave points (mean, se, worst)에 대한 측정치 간 차이를 ANOVA로 분석하세요.
    • 구조적 특성의 분석
    • symmetry (mean, se, worst), fractal dimension (mean, se, worst)에 대한 측정치 간 차이를 ANOVA로 분석하세요.
  • 가설검정 방법은 각 카테고리별로:
    • 귀무가설과 대립가설을 작성하세요.
    • t-score와 p-value를 구하세요.
    • 귀무가설의 채택/기각 여부를 판단하세요.
    • 해당 카테고리 내에서 어떤 특성이 악성 종양 판별에 가장 큰 영향을 미치는지 분석하세요.
# 필수 3. 통계적 가설검정 2

# 양성(B)과 악성(M) 그룹 분리
B_df = df[df['diagnosis'] == 'B']
M_df = df[df['diagnosis'] == 'M']

# ANOVA 수행 함수
def perform_anova(df1, df2, features):
    anova_results = {}
    for feature in features:
        # ANOVA 테스트 수행 (양성(B)과 악성(M) 그룹 비교)
        f_stat, p_value = stats.f_oneway(df1[feature], df2[feature])
        anova_results[feature] = {'F-statistic': f_stat, 'p-value': p_value}
    return anova_results

# 각 카테고리별 특성 리스트
size_shape_features = ['radius_mean', 'perimeter_mean', 'area_mean']
surface_features = ['texture_mean', 'smoothness_mean']
complexity_features = ['compactness_mean', 'concavity_mean', 'concave points_mean']
structural_features = ['symmetry_mean', 'fractal_dimension_mean']

# 분석 수행
anova_results = {
    "크기/형태": perform_anova(B_df, M_df, size_shape_features),
    "표면": perform_anova(B_df, M_df, surface_features),
    "형태 복잡도": perform_anova(B_df, M_df, complexity_features),
    "구조적": perform_anova(B_df, M_df, structural_features)
}

# 결과 출력
for category, results in anova_results.items():
    print(f"\n{category} 관련 특성 분석:")
    print("\n가설:")
    print("H0: 해당 특성의 양성(B)과 악성(M) 간 차이가 없다.")
    print("H1: 해당 특성의 양성(B)과 악성(M) 간 차이가 있다.")
   
    print("\n검정 결과:")
    for feature, values in results.items():
        print(f"{feature}: F-statistic {values['F-statistic']:.2f}, p-value {values['p-value']:.4f}")
        if values['p-value'] < 0.05:
            print("→양성(B)과 악성(M) 간 유의미한 차이가 있음 (귀무가설 기각)")
        else:
            print("→양성(B)과 악성(M) 간 유의미한 차이가 없음 (귀무가설 채택)")

    print("\n" + "-"*40)  # 카테고리 구분을 위한 라인 추가

필수 3 답안

  1. 크기/형태 관련 특성 분석 :
    • 가설 :
      • H0: 해당 특성의 양성(B)과 악성(M) 간 차이가 없다.
      • H1: 해당 특성의 양성(B)과 악성(M) 간 차이가 있다.
    • 검정 결과 :
      • [radius]: F-statistic 646.98 , p-value 0.00
      • [perimeter]: F-statistic 697.24 , p-value 0.00
      • [area]: F-statistic 573.06 , p-value 0.00
    • 해석 :
      • 양성(B)과 악성(M) 간 유의미한 차이가 있음(귀무가설 기각, 대립가설 채택)
  2. 표면 관련 특성 분석 :
    • 가설 :
      • H0: 해당 특성의 양성(B)과 악성(M) 간 차이가 없다.
      • H1: 해당 특성의 양성(B)과 악성(M) 간 차이가 있다.
    • 검정 결과 :
      • [texture]: F-statistic 118.10 , p-value 0.00
      • [smoothness]: F-statistic 83.65 , p-value 0.00
    • 해석 :
      • 양성(B)과 악성(M) 간 유의미한 차이가 있음(귀무가설 기각, 대립가설 채택)
  3. 형태 복잡도 관련 특성 분석 :
    • 가설 :
      • H0: 해당 특성의 양성(B)과 악성(M) 간 차이가 없다.
      • H1: 해당 특성의 양성(B)과 악성(M) 간 차이가 있다.
    • 검정 결과 :
      • [compactness]: F-statistic 313.23 , p-value 0.00
      • [concavity]: F-statistic 533.79 , p-value 0.00
      • [concave points]: F-statistic 861.68 , p-value 0.00
    • 해석 :
      • 양성(B)과 악성(M) 간 유의미한 차이가 있음(귀무가설 기각, 대립가설 채택)
  4. 구조적 관련 특성 분석 :
    • 가설 :
      • H0: 해당 특성의 양성(B)과 악성(M) 간 차이가 없다.
      • H1: 해당 특성의 양성(B)과 악성(M) 간 차이가 있다.
    • 검정 결과 :
      • [symmetry]: F-statistic 69.53 , p-value 0.00
      • [fractal_dimension]: F-statistic 0.09 , p-value 0.7599
    • 해석 :
      • [symmetry]의 경우, 양성(B)과 악성(M) 간 유의미한 차이가 있음(귀무가설 기각, 대립가설 채택)
      • [fractal_dimension]의 경우 양성(B)과 악성(M) 간 유의미한 차이가 없음(귀무가설 채택, 대립가설 기각)
    • 종합 결론:

F-statistic 값이 클수록 해당 특성이 양성(B)과 악성(M)을 구별하는 데 중요한 역할을 한다.

따라서 각 카테고리에서 가장 영향력 있는 특성을 차례대로 나타내면 아래와 같다.

  1. 형태 복잡도 concave points 861.68
  2. 크기/형태 perimeter 697.24
  3. 크기/형태 radius 646.98
  4. 크기/형태 area 573.06
  5. 형태 복잡도 concavity 533.79
  6. 형태 복잡도 compactness 313.23
  7. 표면 texture 118.10
  8. 표면 smoothness 83.65
  9. 구조적 특성 symmetry 69.53
  10. 구조적 특성 fractal_dimension 0.09 (차이 없음)

따라서, "형태 복잡도" 특성이 악성 종양을 판단하는 데 가장 중요한 역할을 하며, 특히 [concave points_mean]이 결정적인 변수이다. 크기/형태 특성도 중요하며, 표면 및 구조적 특성은 보조적인 역할을 한다.


🔥 필수 4. 머신러닝 1


  • 아래와 같은 데이터를 바탕으로 선형 회귀 모델을 훈련시키고, 회귀식을 작성해주세요.
    • 독립 변수(X): radius_mean (평균 반지름)
    • 종속 변수(Y): area_mean (평균 면적)
  • 이 두 변수는 직관적으로 서로 관계가 있을 것으로 예상됩니다
    • 결정계수(R²)를 계산해주세요.
    • 회귀식을 작성해주세요.
    • radius_mean이 25일 때의 area_mean을 예측해주세요.
  • (반지름이 커지면 면적도 커질 것).회귀 모델을 학습한 후:
  • 유의 사항
    • 데이터 전처리나 분할은 필요하지 않습니다. 전체 데이터를 사용하여 학습을 진행해주세요.
    • sklearn.linear_model의 LinearRegression을 사용해주세요.
# 필수 4. 머신러닝 1

# 선형 회귀 분석
X = df[['radius_mean']].values  # 독립 변수
Y = df['area_mean'].values  # 종속 변수

# 모델 학습
model = LinearRegression()
model.fit(X, Y)

# 회귀 계수 계산
slope = model.coef_[0]
intercept = model.intercept_

# 결정계수 R² 계산
r_squared = model.score(X, Y)

# radius_mean이 25일 때의 area_mean 예측
radius_value = np.array([[25]])
predicted_area = model.predict(radius_value)

# 결과 출력
print("\n선형 회귀 분석 결과:")
print(f"회귀식: area_mean = {slope:.2f} * radius_mean + {intercept:.2f}")
print(f"결정계수 (R²): {r_squared:.4f}")
print(f"radius_mean이 25일 때 예상 area_mean: {predicted_area[0]:.2f}")


개인과제로 생각해보는 T-test와 ANOVA 분석의 차이!

 

 

두 결과 모두 양성과 악성 간 유의미한 차이가 있는지 없는지를 분석하는 것이 맞습니다!
하지만 T-test(t-score)와 ANOVA(F-test)의 차이점 때문에 통계량(t-score vs. F-statistic)과 계산 방식이 다릅니다.


🔍 두 결과의 공통점

  • 목적이 동일: 두 분석 모두 양성과 악성 간 차이가 유의미한지 판단하는 것이 목표.
  • p-value가 0.00 (또는 0.7599)로 동일: 두 방법 모두 같은 결론(귀무가설 기각 또는 채택)을 도출.
  • 검정 대상이 동일: radius_mean, perimeter_mean, area_mean 등 동일한 특성들을 비교.

🔥 두 결과의 차이점

비교 항목T-test (t-score) 결과ANOVA (F-statistic) 결과

검정 방법 두 그룹의 평균 차이를 직접 비교 그룹 간 분산을 분석하여 차이 평가
사용된 통계량 t-score F-statistic
계산 방식 그룹 평균 차이/ 표준 오차 집단 간 분산/집단 내 분산
해석 방식 t-score가 클수록 그룹 간 차이가 큼 F-statistic이 클수록 그룹 간 차이가 큼
사용 상황 두 그룹 간 비교 두 그룹 이상 비교 가능 (두 그룹에서도 사용 가능)

📌 T-test vs. ANOVA 차이 상세 설명

  1. 통계량 차이 (t-score vs. F-statistic)
    • T-test는 평균 차이를 표준 오차로 나눈 값을 t-score로 계산.
    • ANOVA는 그룹 간 분산(집단 간 변동)과 그룹 내 분산(집단 내 변동)의 비율을 비교하여 F-statistic을 계산.
    • 예를 들어 radius_mean의 경우,
      • T-test: t-score = -25.44
      • ANOVA: F-statistic = 646.98
      • 두 값은 다르지만, p-value = 0.00으로 동일한 결론을 도출.
  2. 계산 방식 차이
    • T-test평균 차이를 이용해 직접 비교.
    • ANOVA분산(변동성) 차이를 이용하여 비교.
    • 즉, T-test는 평균을, ANOVA는 분산을 기반으로 검정.
  3. 두 그룹 비교에서의 차이
    • 두 그룹만 비교할 때는 T-test와 ANOVA 결과가 거의 동일.
    • 하지만 세 개 이상의 그룹을 비교할 경우에는 ANOVA가 필요함.

🔥 결론: 왜 같은 결론인데 다른 방법을 쓰는가?

두 그룹만 비교하는 경우, T-test와 ANOVA 모두 사용할 수 있으며 결론도 거의 동일.
세 개 이상의 그룹을 비교할 경우, ANOVA(F-test)만 가능.
T-test는 평균 차이를 직접 평가하고, ANOVA는 분산을 이용해 평가하므로 계산 방식이 다름.
결론적으로, 어떤 방법을 사용해도 같은 결론을 얻을 수 있지만, 분석 방식이 다름.