인프런 커뮤니티 질문&답변
캐글 [t1-39 퇴근후딴짓 교육 분석] 7번 문제 질문
작성
·
34
0
안녕하세요.
늦은 시간까지 공부하다가 질문이 생겨 문의 드립니다.. 시간이 시간인지라 시험 전까지 질문에 답변이 없으시면 어쩔 수 없겠죠 ㅠㅠ
캐글 문제를 풀다가 상위 20% 사용자 또는 하위 15% 사용자 필터링 하는 과정의 풀이 방법에 대해 질문 드립니다.
저는 상위 20%의 데이터 추출할 때 특정 컬럼을 기준으로 내림차순 sort를 진행하여 인덱싱으로 추출하였는데 강사님께서는 quantile(0.8) 함수로 데이터를 추출하셨더라구요
답이 다른데.. 제 풀이 방법에 대해 어디에 오류가 있는지 잘 모르겠습니다ㅜㅜ
상위 N% 데이터 추출 시에 제 풀이처럼 풀 수 없나요?
#본인의 풀이
top20 = df.sort_values('학습 효율 지수', ascending=False).reset_index(drop=True)
end = int(len(top20)*0.2)
df1 = top20[:end]
result7 = df1['총 결제 금액'].mean()
print("result7:", int(result7)) #답 : 127125
#강사님의 풀이
top_20_cutoff = df['학습 효율 지수'].quantile(0.8)
top_20_df = df[df['학습 효율 지수'] >= top_20_cutoff]
result7=top_20_df['총 결제 금액'].mean()
print("result7:", int(result7)) #답 : 123304
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. 민지님.
상위 N% 사용자를 추출할 때, 두 가지 접근법의 차이에 대해 고민하고 계시는군요.
두 가지 접근법 비교
셰이프를 이용한 분할:
본인의 풀이는 데이터를 내림차순으로 정렬한 후, 총 데이터의 20% 지점까지의 데이터를 선택하여 평균을 구하는 방식입니다. 이 방식은 전체 데이터의 정확한 상위 20% (내림차순 정렬 기준)만을 선택하는 데 유리합니다.Quantile 함수를 이용한 분할:
강사님의 풀이는quantile함수를 통해 특정 지점의 값을 기준으로 원본 데이터에서 필터링하는 방식입니다. 이 방법은 ‘학습 효율 지수’가 포함하는 모든 행의 각'총 결제 금액'에 대하여 상위 20% 조건을 직접 적용하여 평균을 계산하므로, 데이터의 분포를 기반으로 한 필터링이 가능합니다.
발생할 수 있는 오차의 이유
두 방법 사이의 결과 차이는 데이터의 분포에 따라 다를 수 있습니다.
- 정렬 후 자르기는 상위 20% 부분만의 평균을 구하기 때문에 특정 구역만의 집중된 평균을 구합니다.
- Quantile은 실제로 데이터 분포에 기초하여 상위 20%와 해당 기준 이상인 모든 행을 고려하여 평균을 산출합니다.
따라서 두 방법이 다를 수 있는 이유는 데이터의 분포 상태와 커트라인 설정 방식의 차이에서 발생합니다.
제안
본인의 방법도 맞지만, 원하는 결과가 상위 20%에 해당하는 값들의 평균을 구하는 것이라면 quantile을 사용하는 방법이 일반적으로 더 안정적인 결과를 제공합니다.
비슷한 문제 해결에 관한 논의를 다룬 캐글 T1-16 문제 풀이중 질문드립니다 를 참고하시길 추천드립니다. 이 링크는 다른 데이터 프레임 문제 해결 시 어떤 선택지를 둘러볼 수 있는지에 대한 안내 자료로도 유용할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






아하!! 이해했습니다 두 풀이방법 모두 알아둬야겠네요ㅜㅜ
늦은시간에 답변해 주셔서 감사합니다!