-
[2월 3주차-2/21]😊 병원 노쇼 환자 분석 🏥Why Not SW CAMP 5기/수업 기록 2025. 2. 24. 09:20
📌 문제 정의
한 병원에서는 예약한 환자들이 오지 않아 진료가 원활히 이루어지지 않는 일이 종종 발생
문제를 해결하기 위해
- 예약하고 오지 않는 환자들의 특징을 파악하고,
- 'No Show' 발생률을 줄일 수 있는 아이디어를 제시!!!
📊 데이터 설명
속성 값 형태 설명
PatientID number 환자ID AppointmentID number 예약ID Gender F or M 성별 ScheduledDay date 병원 예약을 한 날 📅 AppointmentDay date 실제 병원에 방문하는 날 🏥 Age number 나이 👶👴 Neighbourhood string 병원 위치 📍 SMS_received 0 or 1 메시지 수락 여부 📩 No-show Yes or No 노쇼 여부 🚫
📊 데이터 전처리 및 분석
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns df = pd.read_csv('data/medical.csv') df.head(3)
1️⃣ 데이터 확인 🧐
df.isnull().sum() df.info() df.describe()
2️⃣ 이상치 제거 및 데이터 변환 ✍️
# Age에 이상치 제거 🚨 df = df[df.Age>=0] df = df[df.Age<=110] # No-show 데이터 타입 변경 🔄 df['No-show'] = df['No-show'].map({'Yes': 1, 'No':0}) # datetime으로 타입 변경 🕒 df['AppointmentDay'] = pd.to_datetime(df['AppointmentDay']) df['ScheduledDay'] = pd.to_datetime(df['ScheduledDay'])
3️⃣ 대기 기간 변수 추가 및 분석 🔎
df['waiting_day'] = df['AppointmentDay'].dt.dayofyear - df['ScheduledDay'].dt.dayofyear df = df[df.waiting_day >= 0]
📉 대기 기간이 길수록 노쇼 발생률 증가!
📊 노쇼와 관련된 데이터 시각화 🔍
1️⃣ 노쇼 발생 여부 📊
sns.countplot(x='No-show', data=df) plt.title('노쇼 발생 횟수') plt.show()
2️⃣ 성별에 따른 노쇼 차이 분석 👫
sns.countplot(x='Gender', hue='No-show', data=df) plt.title('성별에 따른 노쇼 여부') plt.show()
3️⃣ 대기 기간과 노쇼 관계 📅
plt.figure(figsize=(10,5)) sns.histplot(df[df['No-show']==1]['waiting_day'], bins=30, color='red', label='No-show', alpha=0.7) sns.histplot(df[df['No-show']==0]['waiting_day'], bins=30, color='blue', label='Show', alpha=0.3) plt.legend() plt.title('대기일과 노쇼 발생 관계') plt.show()
4️⃣ 알림 메시지 허용 여부와 노쇼 📩
sns.barplot(x='SMS_received', y='waiting_day', hue='No-show', data=df) plt.title('알림 메시지 여부와 노쇼 발생') plt.show()
5️⃣ 노쇼 비율 비교 📊
a = len(df[(df['SMS_received']==0) & (df['No-show']==1)]) b = len(df[(df['SMS_received']==0) & (df['No-show']==0)]) c = len(df[(df['SMS_received']==1) & (df['No-show']==1)]) d = len(df[(df['SMS_received']==1) & (df['No-show']==0)]) print(f'알림 메시지 미허용 노쇼율: {a / (a+b):.2%}') print(f'알림 메시지 허용 노쇼율: {c / (c+d):.2%}')
📊 결론
- 대기일수가 길수록 노쇼 증가 📈
- 알림 메시지 미허용 시 5일 이상 대기하면 노쇼 가능성 증가 ⚠️
- 성별과 노쇼의 연관성 존재 🤔
📌 No-show 줄이기 위한 아이디어! 💡
✅ 대기 시간이 길어지지 않도록 예약 시스템 최적화
✅ 알림 메시지를 적극 활용해 방문 유도 📩
✅ 예약 후 일정 리마인드 기능 추가 🔔
✅ 노쇼 가능성이 높은 환자들에게 별도 안내 제공 📢
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[2월 4주차-2/24(2)]WAS(Web Application Server)와 ANSI SQL 정리 (1) 2025.02.24 [2월 4주차-2/24(1)]MySQL 8.2 버전 함수 사전 📖 (0) 2025.02.24 [2월 3주차-2/20(3)]대한민국 행복 지도 데이터 분석 (0) 2025.02.20 [2월 3주차-2/20(2)]미세먼지와 날씨 데이터 분석 및 시각화 (0) 2025.02.20 [2월 3주차-2/20(1)]다나와 무선청소기 데이터 분석 및 시각화 🧹📊 (0) 2025.02.20