Worked Example · Exploration
Worked Example: Frequency Analysis
11 sections
01예제로 들어가기
타이타닉 승객은 어떤 집단으로 구성되어 있었고, 누가 더 많이 생존했을까?
이번 예제에서는 빈도분석을 이용해 타이타닉 승객이 객실 등급·성별·연령대별로 얼마나 포함되어 있었는지 확인하고, 각 집단에서 생존과 사망이 어떻게 나뉘었는지 살펴봅니다.
빈도분석은 범주마다 관측값이 몇 개 있는지 세어 데이터의 구성을 파악하는 방법입니다. 다만 이 예제의 데이터는 승객 한 명이 한 행을 차지하는 원자료가 아닙니다. 등급 × 성별 × 연령대 × 생존 여부의 32개 조합과 각 조합에 속한 승객 수를 기록한 집계표입니다.
따라서 단순히 32개 행의 범주를 세면 실제 승객 분포가 아니라 표를 구성하는 조합의 개수를 얻게 됩니다. 실제 승객을 분석하려면 Freq를 빈도 가중치로 적용해야 합니다.
이 예제에서 확인할 질문은 다음과 같습니다.
타이타닉 탑승자 2,201명은 객실 등급·성별·연령대별로 어떻게 구성되어 있었으며, 생존 비율은 집단마다 어떻게 달랐을까?
예제 데이터: Titanic
분석에는 R의 datasets::Titanic 데이터를 CSV 형태로 변환한 자료를 사용했습니다.
| 항목 | 내용 |
|---|---|
| 데이터 행 | 32행 |
| 실제 승객 수 | 2,201명 |
| 변수 | 5개 |
| 데이터 구조 | 4개 범주형 변수의 조합별 집계 빈도표 |
| 출처 | datasets::Titanic |
| 변수 | 의미 | 분석 역할 |
|---|---|---|
| Class | 승객 등급: 1st, 2nd, 3rd, Crew | 범주형 변수 |
| Sex | 성별: Male, Female | 범주형 변수 |
| Age | 연령대: Child, Adult | 범주형 변수 |
| Survived | 생존 여부: No, Yes | 범주형 결과변수 |
| Freq | 해당 조합에 속한 승객 수 | 빈도 가중치 |
02요약: 핵심 발견

- 현재 화면의 분석 단위: Class, Sex, Age 세 변수에 대해 32개 조합 행을 단순 집계했습니다.
- 현재 결과: Class는 각 8행으로 25%, Sex와 Age는 각 16행으로 50%입니다.
- 중요한 해석: 이 균형은 승객 분포가 아니라 모든 조합을 빠짐없이 만든 표의 구조에서 발생했습니다.
- 실제 분석 단위: Freq를 적용하면 분석 대상은 32행이 아니라 총 2,201명의 승객입니다.
- 실제 승객 구성: Crew 40.21%, 3rd 32.08%, Male 78.65%, Adult 95.05%였습니다.
- 전체 생존 결과: 711명이 생존하고 1,490명이 사망해 생존율은 32.30%였습니다.
- 집단별 차이: 여성 73.19%, 어린이 52.29%, 1등석 62.46%가 생존했습니다.
- 분석 설정 보완: Survived를 분석 변수에 포함하고 Freq를 빈도 가중치로 지정해야 합니다.
현재 화면의 계산은 32개 행 자체를 분석한다는 조건에서는 틀리지 않습니다. 그러나 Titanic 데이터가 나타내는 실제 승객 구성을 설명하려는 목적에는 맞지 않습니다. 이 예제에서는 행 기준 빈도와 승객 기준 가중 빈도를 구분하는 것이 가장 중요합니다.
03결과 1. 왜 모든 범주가 균형적으로 보였을까?

원자료는 Class 4개 × Sex 2개 × Age 2개 × Survived 2개의 모든 조합으로 구성되어 있습니다.
모든 조합이 한 번씩 들어 있으므로 행의 개수만 세면 다음과 같이 완벽하게 균형을 이룹니다.
| 변수 | 행 기준 빈도 | 행 기준 비율 |
|---|---|---|
| Class | 각 등급 8행 | 각 25.00% |
| Sex | 남성 16행, 여성 16행 | 각 50.00% |
| Age | 어린이 16행, 성인 16행 | 각 50.00% |
| Survived | 사망 16행, 생존 16행 | 각 50.00% |
이 결과는 승객이 균형적으로 탑승했다는 뜻이 아닙니다. 조합표가 대칭적으로 설계되었다는 뜻입니다. 예를 들어 Crew × Female × Child × Yes처럼 실제 승객 수가 0명인 조합도 하나의 행으로 존재합니다.
따라서 현재 화면의 정규화 엔트로피 1.000과 빈도비 1.00도 실제 승객의 균형이 아니라 조합 행의 균형을 나타냅니다.
04결과 2. Class의 25%는 무엇을 의미할까?

현재 결과에서 네 등급은 모두 8행씩 나타납니다. 따라서 1st가 최빈값으로 표시되고 Top 1 Box가 25%로 계산됐습니다.
하지만 네 등급 모두 빈도가 8로 같으므로 고유한 최빈값은 없습니다. 1st, 2nd, 3rd, Crew가 공동 최빈값이며, 화면이 1st 하나만 표시한 것은 동률 가운데 첫 번째 값을 반환했기 때문입니다.

Freq를 적용하면 실제 승객의 등급 분포는 전혀 다르게 나타납니다.
| Class | 승객 수 | 승객 기준 비율 |
|---|---|---|
| 1st | 325 | 14.77% |
| 2nd | 285 | 12.95% |
| 3rd | 706 | 32.08% |
| Crew | 885 | 40.21% |
| 전체 | 2,201 | 100.00% |
실제 최빈 범주는 Crew이며 전체의 40.21%입니다. 현재 화면의 1st 25%는 승객 기준 결과로 해석하면 안 됩니다.
05결과 3. 성별과 연령대도 실제로 절반씩이었을까?
행 기준으로는 Male과 Female이 각각 16번 등장합니다. 그러나 Freq를 합산하면 남성이 1,731명, 여성이 470명입니다.


| Sex | 승객 수 | 승객 기준 비율 |
|---|---|---|
| Male | 1,731 | 78.65% |
| Female | 470 | 21.35% |
Age도 행 기준으로는 Child와 Adult가 각각 16번 등장하지만, 실제 승객은 어린이 109명과 성인 2,092명입니다.


| Age | 승객 수 | 승객 기준 비율 |
|---|---|---|
| Child | 109 | 4.95% |
| Adult | 2,092 | 95.05% |
따라서 Male 50%, Child 50%라는 현재 결과는 실제 승객 구성과 크게 다릅니다. 빈도분석에서 집계 데이터의 가중치를 놓치면 결론 자체가 달라질 수 있습니다.
06결과 4. 전체 승객 중 얼마나 생존했을까?
현재 분석 변수에는 Survived가 포함되지 않았습니다. 생존 여부를 분석 변수에 추가하고 Freq를 가중치로 적용하면 다음 결과를 얻습니다.
| Survived | 승객 수 | 비율 |
|---|---|---|
| No | 1,490 | 67.70% |
| Yes | 711 | 32.30% |
| 전체 | 2,201 | 100.00% |
전체 승객의 약 3분의 1이 생존하고 3분의 2가 사망했습니다. 그러나 이 전체 비율만으로는 어떤 집단에서 생존 가능성이 높거나 낮았는지 알 수 없습니다. 이를 확인하려면 Survived와 다른 변수의 교차빈도표를 봐야 합니다.
07결과 5. 생존율은 집단마다 어떻게 달랐을까?
각 집단의 생존율은 해당 집단의 생존자 수 ÷ 해당 집단의 전체 승객 수로 계산합니다.
객실 등급별 생존율
| Class | 생존 | 전체 | 생존율 |
|---|---|---|---|
| 1st | 203 | 325 | 62.46% |
| 2nd | 118 | 285 | 41.40% |
| 3rd | 178 | 706 | 25.21% |
| Crew | 212 | 885 | 23.95% |
1등석의 생존율이 62.46%로 가장 높았고, 승무원과 3등석은 약 24~25%로 낮았습니다.
성별·연령대별 생존율
| 구분 | 생존 | 전체 | 생존율 |
|---|---|---|---|
| Male | 367 | 1,731 | 21.20% |
| Female | 344 | 470 | 73.19% |
| Child | 57 | 109 | 52.29% |
| Adult | 654 | 2,092 | 31.26% |
여성의 생존율은 73.19%로 남성의 21.20%보다 높았고, 어린이는 52.29%로 성인의 31.26%보다 높았습니다. 다만 이 수치는 단순한 집단별 비율이므로 등급·성별·연령의 효과를 서로 통제한 결과는 아닙니다.
08결과 6. 빈도만으로 무엇까지 말할 수 있을까?
빈도표는 승객 구성과 집단별 생존 패턴을 분명하게 보여줍니다. 그러나 관찰된 비율 차이가 우연인지, 그리고 다른 변수들을 함께 고려해도 차이가 유지되는지는 빈도분석만으로 판단할 수 없습니다.
- Class × Survived, Sex × Survived, Age × Survived의 연관성을 검정하려면 카이제곱 검정을 사용합니다.
- 등급·성별·연령을 동시에 고려해 생존 가능성을 설명하려면 이항 로지스틱 회귀를 사용합니다.
- 집계표를 그대로 회귀에 사용할 때는 생존·사망 인원이나 Freq 가중치를 올바르게 지정해야 합니다.
- 빈도가 0인 8개 조합은 실제로 사람이 없었다는 의미이므로 결측값과 구분해야 합니다.
빈도분석은 결론을 확정하는 마지막 단계라기보다, 데이터의 구성과 비교해야 할 패턴을 찾는 출발점입니다.
09이 예제의 결론
현재 화면에서는 Class, Sex, Age를 32개 행 기준으로 집계했기 때문에 모든 범주가 균형적인 것처럼 나타났습니다. 그러나 Freq를 적용하면 총 2,201명 가운데 승무원과 3등석, 남성, 성인이 큰 비중을 차지했으며 전체 생존율은 32.30%였습니다.
생존율은 여성 73.19%, 어린이 52.29%, 1등석 62.46%로 높았고, 남성 21.20%, 승무원 23.95%, 3등석 25.21%로 낮았습니다. 이 차이를 더 엄밀하게 확인하려면 교차분석과 로지스틱 회귀로 이어가야 합니다.
한 문장으로 정리하면
Titanic 집계표에서는 32개 행을 세는 것이 아니라 Freq를 가중치로 적용해야 실제 2,201명의 승객 구성과 생존 패턴을 올바르게 해석할 수 있습니다.
10다음으로 확인하면 좋은 것
- 가중 빈도표 — Freq를 적용한 Class·Sex·Age·Survived의 빈도와 비율을 확인합니다.
- 교차빈도표 — 각 설명변수와 Survived를 교차해 집단별 생존자·사망자 수를 비교합니다.
- 카이제곱 검정 — 생존 여부와 각 범주형 변수가 독립인지 검정합니다.
- 효과크기 — Cramér's V로 연관성의 크기를 함께 보고합니다.
- 로지스틱 회귀 — 등급·성별·연령을 동시에 고려해 생존 오즈를 추정합니다.
- 상호작용 확인 — 성별 효과가 등급이나 연령에 따라 달라지는지 검토합니다.
11출처
- 데이터: Titanic_statistica.csv
- 원자료: datasets::Titanic
- 분석 범위: 32개 집계 행, 실제 승객 2,201명