공모전 | 서울시 공공자전거 군집분석 모델링(k-means)

728x90

 

 

▶ 이전 게시글 보기

2024.07.14 - [분류 전체보기] - 공모전 | 서울시 공공자전거 데이터셋, 분석 방향, EDA

 

공모전 | 서울시 공공자전거 데이터셋, 분석 방향, EDA

EDA 및 전처리 코드_주피터 노트북1. 데이터셋 서울시 공공자전거 대여이력 정보 (2023.08~2023.12)https://data.seoul.go.kr/dataList/OA-15182/F/1/datasetView.do 열린데이터광장 메인데이터분류,데이터검색,데이터

nasena.tistory.com


 

▶ 군집분석 코드_주피터 노트북

(모델링_외) 따릉이 대여이력(23.08~12).ipynb
0.92MB
(모델링_내) 따릉이 대여이력(23.08~12).ipynb
5.44MB


4. k-means 군집분석 모델링

4-1) 모델링 전 전처리

▶ 내국인 데이터 샘플링

내국인 데이터가 너무 커서 샘플링 진행 → 전체 데이터의 50% 추출 (절반)

성별, 연령대, 대여월 기준 층화 추출

import pandas as pd
from sklearn.model_selection import train_test_split

# train_test_split 층화 추출
_, stratified_sample = train_test_split(df_in, test_size=0.5, stratify=df_in[['성별', '연령대', '대여월']], random_state=42)

# 추출된 데이터 확인
print(stratified_sample.head())

# 결과를 파일로 저장 
stratified_sample.to_csv('./서울시 따릉이 내국인 데이터(층화추출1).csv', index=False)

 

▶ 대여구, 반납구 간단 EDA

  외국인 내국인 비고
대여구
(외국인)
중구 > 종로구 > 마포구 > 용산구

(내국인)
강서구 > 영등포구 > 송파구 > 양천구
반납구
(외국인)
중구 > 종로구 > 마포구 > 용산구

(내국인)
강서구 > 영등포구 > 송파구 > 양천구

 

4-2) 특성추출

대여소 별,

외국인 사용 컬럼 특성 기준
총대여횟수 대여일자 count
평균 이용시간 이용시간(분) mean
평균 이용거리 이용거리(M) mean
주말 대여 비율 (<> 주중 대여 비율) 주말여부 주말 1, 주중 0
새벽 대여 비율  새벽시간  0시 ~ 7시
오전 대여 비율  오전시간  7시 ~ 10시
점심 대여 비율  점심시간  10시 ~ 14시
오후 대여 비율 오후시간  14시 ~ 18시
저녁 대여 비율 저녁시간 18시 ~ 22시
야간 대여 비율 야간시간  22시 ~ 24시

 

대여소 별,

내국인 사용 컬럼 특성 기준
총대여횟수 대여일자 count
평균 이용시간 이용시간(분) mean
평균 이용거리 이용거리(M) mean
남성고객 비율 (<> 여성고객 비율) 성별_M 남자 1, 여자 0
주말 대여 비율  (<> 주중 대여 비율) 주말여부 주말 1, 주중 0
새벽 방문고객 비율 새벽시간 0시 ~ 7시
출근시간 대여 비율 출근시간 7시 ~ 10시
오전시간 대여비율 오전시간 10 ~ 12시
점심시간 대여 비율 점심시간 12 ~ 14시
오후시간 대여 비율 오후시간 14 ~ 17시
퇴근시간 대여 비율 퇴근시간 17 ~ 19시
야간 대여 비율 야간시간 19 ~ 24시
주중 청소년고객 비율 주말여부, 연령대 주말 0,  청소년 : 10대
주말 청소년고객 비율 주말여부, 연령대 주말 1, 청소년 : 10대
주중 청년고객 비율   주말여부, 연령대 주말 0,  청년 : 20대, 30대
주말 청년고객 비율   주말여부, 연령대 주말 1, 청년 : 20대, 30대
주중 장년고객 비율  주말여부, 연령대 주말 0,  장년 : 40대, 50대
주말 장년고객 비율    주말여부, 연령대 주말 1, 장년 : 40대, 50대
주중 노인고객 비율 주말여부, 연령대 주말 0,  노인 : 60대, 70대
주말 노인고객 비율 주말여부, 연령대 주말 1, 노인 : 60대, 70대

 

대여소 별,

그 외
특정 요일의 대여 횟수  
특정 시간대의 대여 횟수  
청년고객 비율  
장년고객 비율  
대여소별 평균 연령대
주중 해당 대여구 고객 비율 
주말 해당 대여구 고객 비율
주중 해당 반납구 고객 비율
주말 해당 반납구 고객 비율

 

4-3) 군집 분석 (k-means clustering)

 

▶ k-means와 DB scan 군집분석 비교

K-means 군집분석과 DBSCAN은 둘 다 군집화 알고리즘

K-means 군집분석
특징:

K-means는 데이터셋을 k개의 군집으로 나누는 알고리즘
각 군집은 중심점(centroid) 주변에 데이터가 모이는 형태
군집 수 k를 미리 지정해야 함
중심점을 반복적으로 이동시켜 군집을 최적화함

장점:
계산 속도가 빠르고 대규모 데이터셋에 적합.
이해하기 쉽고 구현이 간단

단점:
군집 수 k를 사전에 지정해야 함
군집의 모양이 구형(원형)에 가까운 경우에만 잘 작동함
이상치(outlier)에 민감함

사용 사례:
고객 세분화: 마케팅에서 고객을 구매 행동에 따라 여러 그룹으로 나눌 때
이미지 압축: 이미지를 여러 색상 군집으로 나누어 색상 수를 줄일 때


##################################3
DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

특징:
DBSCAN은 밀도 기반 군집화 알고리즘
군집의 모양이 불규칙해도 잘 작동함
두 개의 주요 매개변수: ε (epsilon)과 minPts (최소 포인트 수)
ε: 점이 군집에 포함되기 위한 최대 거리
minPts: 군집을 형성하기 위한 최소 포인트 수
이상치(outlier)를 자연스럽게 구분함

장점:
군집 수를 사전에 지정할 필요가 없음
이상치와 노이즈를 효과적으로 처리함
다양한 형태의 군집을 찾을 수 있음

단점:
매개변수 ε와 minPts를 선택하기 어려움
고차원 데이터에서는 성능이 떨어질 수 있음

사용 사례:
지리적 데이터 분석: GPS 데이터를 이용해 사람들이 자주 모이는 장소를 찾을 때
이상치 탐지: 금융 거래 데이터에서 의심스러운 활동을 탐지할 때

########################
사용 사례 비교
K-means를 사용할 때:
데이터가 비교적 균일하고 군집의 크기가 비슷한 경우
군집의 수를 미리 알고 있는 경우
계산 자원이 한정되어 있고, 빠른 결과가 필요한 경우

DBSCAN을 사용할 때:
데이터가 불규칙한 형태로 분포되어 있는 경우
군집의 수를 미리 알 수 없는 경우
이상치가 많고, 이들을 제외하고 군집을 형성하고자 하는 경우

예시
K-means 예시:
온라인 쇼핑몰에서 고객의 구매 데이터를 분석해 여러 고객 군집을 만들고, 각 군집에 맞춘 마케팅 전략을 수립할 때. 예를 들어, 5개의 군집으로 나누어 각 군집에 맞는 맞춤형 이메일 캠페인을 진행할 수 있음
DBSCAN 예시:
도시 내 GPS 데이터를 분석해 사람들이 자주 모이는 장소를 찾고자 할 때. DBSCAN은 사람들이 자주 모이는 장소(군집)를 찾아내고, 동시에 드물게 나타나는 이상치(이동 경로)를 제거하는 데 유용함

 

▶ k-means 군집분석

(1) 최적의 k 찾기

  외국인 내국인
Elbow method
silhouette_score

 

(2) 대여소 군집 결과 시각화

  외국인 내국인
k = 2
k = 3
k = 4

 

(3) 군집 분석 결과 해석

▶외국인

k=2

  • 군집 0 : 평균이용시간, 평균이용거리, 주말대여비율, 오후대여비율
  • 군집 1 : 총대여횟수, 새벽대여비율, 오전대여비율, 점심대여비율, 저녁대여비율, 야간대여비율

군집 0은 본격적으로 따릉이로 여행하려는 외국인 관광객들

군집 1은 가볍게 이동하기 위한 목적으로 따릉이를 이용하는 외국인 관광객들

 

k=3

  • 군집 0 : 평균이용거리, 주말대여비율, 오후대여비율
  • 군집 1 : 새벽대여비율, 점심대여비율, 저녁대여비율, 야간대여비율
  • 군집 2 : 총대여횟수, 평균이용시간, 오전대여비율

 

k=4

  • 군집 0 : 평균이용거리, 주말대여비율, 오후대여비율
  • 군집 1 : 점심대여비율, 저녁대여비율, 야간대여비율
  • 군집 2 : 총대여횟수, 평균이용시간, 오전대여비율
  • 군집 3 : 새벽대여비율

▶ 내국인

첫 번째 시도.

다양한 특성 + 청년 기준 20~30대

 

k=2

  • 군집 0 : 총대여횟수, 새벽대여비율, 퇴근시간대여비율, 야간대여비율, 주중청년고객비율, 주말청년고객비율, (여성고객비율), (주중대여비율)
  • 군집 1 : 남성고객비율, 평균이용시간, 평균이용거리, 주말대여비율, 출근시간대여비율, 오전대여비율, 점심대여비율, 오후대여비율, 주중청소년고객비율, 주말청소년고객비율, 주중장년고객비율, 주말장년고객비율, 주중노인고객비율, 주말노인고객비율

 

k=3

  • 군집 0 : 총대여횟수, 새벽대여비율, 야간대여비율, 주중청년고객비율, 주말청년고객비율, (여성고객비율), (주중대여비율)
  • 군집 1 : 남성고객비율, 주말대여비율, 출근시간대여비율, 주중청소년고객비율, 주말청소년고객비율 
  • 군집2 : 평균이용시간, 평균이용거리, 오전대여비율, 점심대여비율, 오후대여비율, 퇴근시간대여비율, 주중장년고객비율, 주말장년고객비율, 주중노인고객비율, 주말노인고객비율 

군집 0은 주중 청년들이 새벽, 야간에 많이 이용 

군집 1은 주말이나 출근(통학)시간에 청소년 위주로 많이 이용 

군집 2는 오전~점심~저녁까지 장년 위주로 따릉이를 장시간, 장거리로 이용

 

k=4

  • 군집0 : 총대여횟수, 야간대여비율, 주중청년고객비율, 주말청년고객비율, (여성고객비율)
  • 군집1 : 남성고객비율, 오전대여비율, 점심대여비율, 오후대여비율, 퇴근시간대여비율, (주중대여비율)
  • 군집2 : 평균이용시간, 평균이용거리, 주말대여비율, 새벽대여비율, 주말장년고객비율, 주중노인고객비율, 주말노인고객비율
  • 군집3 : 출근시간대여비율, 주중청소년고객비율, 주말청소년고객비율

군집 0은 야간에 청년들이 많이 이용 

군집 1은 주중 오전~점심~오후~퇴근시간대에 이용 

군집 2는 주말 장년 위주로 장시간, 장거리 이용 

군집 3은 출근(통근)시간대에 청소년 위주로 이용 


두 번째 시도.

다양한 특성 + 청년1 기준 20, 청년2 기준 30대로 구분

*이유 : 20대와 30대의 따릉이 이용 상황이 다를 수 있겠다고 판단

 

(1) 최적의 k 찾기

Elbow method silhouette_score

 

(2) 대여소 군집 결과 시각화

k=2 k=3 k=4

 

(3) 군집 분석 결과 해석

k=2

  • 군집 0 : 총대여횟수, 퇴근시간대여비율, 야간대여비율, 주중청년1고객비율, 주말청년1고객비율, 주중청년2고객비율, 주말청년2고객비율, (여성고객비율), (주중대여비율)
  • 군집 1 : 남성고객비율, 평균이용시간, 주말대여비율, 새벽대여비율, 출근시간대여비율, 오전대여비율, 점심대여비율, 오후대여비율, 주중청소년고객비율, 주말청소년고객비율, 주중장년고객비율, 주말장년고객비율, 주중노인고객비율, 주말노인고객비율

k=3

  • 군집 0 : 총대여횟수, 새벽대여비율, 야간대여비율, 주중청년1고객비율, 주말청년1고객비율, 주중청년2고객비율, 주말청년2고개비율, (여성고객비율)
  • 군집 1 : 주말대여비율, 출근시간대여비율, 오후대여비율, 주중청소년고객비율, 주말청소년고객비율
  • 군집 2 : 남성고객비율, 평균이용시간, 평균이용거리, 오전대여비율, 점심대여비율, 퇴근시간대여비율, 주중장년고객비율, 주말장년고객비율, 주중노인고객비율, 주말노인고객비율, (주중대여비율)

k=4

  • 군집 0 : 총대여횟수, 야간대여비율, 주중청년1고객비율, 주말청년1고객비율, (여성고객비율)
  • 군집 1 : 출근시간대여비율, 오후대여비율, 주중청소년고객비율, 주말청소년고객비율
  • 군집 2 : 남성고객비율, 오전대여비율, 점심대여비율, 퇴근시간대여비율, 주중청년2고객비율, 주말청년2고객비율, (주중대여비율)
  • 군집 3 : 평균이용시간, 평균이용거리, 주말대여비율, 새벽대여비율, 주중장년고객비율, 주말장년고객비율, 주중노인고객비율, 주말노인고객비율 → (관광, 생활)

세 번째 시도.

특성(피처) 단순화 작업 + 청년 기준 20~30대

* 이유 : [주말대여비율] 컬럼이 있는데 주중/주말로 연령대를 세분화하면 특성이 중복된다 판단

 

(1) 최적의 k 찾기

Elbow method silhouette_score

 

(2) 대여소 군집 결과 시각화

k=2 k=3 k=4

 

(3) 군집 분석 결과 해석

 

k=2

  • 군집 0 : 총대여횟수, 평균이용시간, 주말대여비율, 새벽대여비율, 퇴근시간대여비율, 야간대여비율,
                 청년비율, (여성고객비율)
  • 군집 1 : 남성고객비율, 평균이용거리, 출근시간대여비율, 오전대여비율, 점심대여비율, 오후대여비율, 
                 청소년비율, 장년비율, 노인비율, (주중대여비율)

군집 0은 주말 퇴근시간대 이후 저녁까지 청년들이 장시간 많이 이용

군집 1은 주중 출근시간~점심~오후까지 청소년, 장년 위주로 장거리로 이용 

 

k=3  >> 최종 군집 분리 기준으로 선정!

  • 군집 0 : 총대여횟수, 새벽대여비율, 야간대여비율, 청년비율 → (막차대용?)
  • 군집 1 : 남성고객비율, 출근시간대여비율, 오전대여비율, 점심대여비율, 청소년비율, 장년비율, (주중대여비율)
    → (생활)
  • 군집 2 : 평균이용시간, 평균이용거리, 주말대여비율, 오후대여비율, 퇴근시간대비율, 노인비율, (여성고객비율)
    → (관광)

 

k=4

  • 군집 0 : 총대여횟수, 야간대여비율, 청년비율 → (막차대용?)
  • 군집 1 : 새벽대여비율, 출근시간대여비율, 청소년비율 → (통학)
  • 군집 2 : 평균이용시간, 평균이용거리, 주말대여비율, 노인비율 → (관광)
  • 군집 3 : 남성고객비율, 오전대여비율, 점심대여비율, 오후대여비율, 퇴근시간대여비율, 장년비율 → (생활)

네 번째 시도.

특성(피처) 단순화 작업 + 청년1 기준 20, 청년2 기준 30대로 구분

 

(1) 최적의 k 찾기

Elbow method silhouette_score

 

(2) 대여소 군집 결과 시각화

k=2 k=3 k=4

 

(3) 군집 분석 결과 해석

 

k=2

  • 군집 0 : 총대여횟수, 평균이용시간, 주말대여비율, 새벽대여비율, 퇴근시간대여비율, 야간대여비율,
                 청년1비율, 청년2비율, (여성고객비율)
  • 군집 1 : 남성고객비율, 평균이용거리, 출근시간대여비율, 오전대여비율, 점심대여비율,  오후대여비율, 
                 청소년비율, 장년비율, 노인비율, (주중대여비율)

군집 0은 주말 퇴근시간대 이후 저녁까지 청년1,2들이 장시간 많이 이용

군집 1은 주중 출근시간~점심~오후까지 청소년, 장년 위주로 장거리로 이용 

 

k=3

  • 군집 0 : 총대여횟수, 새벽대여비율, 야간대여비율, 청년1비율, 청년2비율 → (막차대용?)
  • 군집 1 : 남성고객비율, 출근시간대여비율, 오전대여비율, 점심대여비율, 청소년비율, 장년비율, (주중대여비율)
    → (생활)
  • 군집 2 : 평균이용시간, 평균이용거리, 주말대여비용, 오후대여비율, 퇴근시간대여비율, 노인비율 (여성고객비율)
    → (관광)

 

k=4

  • 군집 0 : 총대여횟수, 야간대여비율, 청년1비율 → (막차대용?)
  • 군집 1 : 남성고객비율, 새벽대여비율, 출근시간대여비율, 청소년비율 → (통근, 통학)
  • 군집 2 : 평균이용시간, 평균이용거리, 주말대여비율, 노인비율, (여성고객비율) → (관광)
  • 군집 3 : 남성고객, 오전대여비율, 점심대여비율, 오후대여비율, 퇴근시간대여비율, 청년2비율, 장년비율, (주중대여비율) → (생활)

https://velog.io/@ljs7463/%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81

 

클러스터링(군집화) 정리

INDEX >1. 목적 종류 similarity 종류 1 : 계층군집 종류 2 : PointAssignment(K-means) 계층군집과 PointAssignment(K-means)의 장단점 내가 클러스터링을 공부하면서 겪었던 개념적 착오 정리 군집분석 단계 최적의

velog.io

 

4-4) 대여소 별 특성 확인

- 출/퇴근 외 관광으로 주로 활용되는 주 대여소 추정 (관광 군집) 

- 관광 관련 대여소 좌표 확인 ('서울시 따릉이 마스터 정보' 데이터와 조인)

- 찍힌 좌표 반경 내 관광지(방문할 수 있는 시설, 장소) 추천

 

세 번째 시도,

k=3일 때 버전 결과 사용

군집0 : 막차 대용 대여소 군집1 : 출근 도우미 대여소 군집2 : 여가생활 대여소
총대여횟수, 청년비율, 새벽대여비율,
퇴근시간대여비율, 야간대여비율, 
남성고객비율, 장년비율, 출근시간대여비율, 오전대여비율, 점심대여비율,  평균이용시간, 평균이용거리, 주말대여비율, 오후대여비율, 퇴근시간대여비율

 


▶ (참고) 대여소 별 최단 거리 도출 알고리즘

 

https://velog.io/@dltmdrl1244/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%99%B8%ED%8C%90%EC%9B%90-%EC%88%9C%ED%9A%8CTSP-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

[알고리즘] 외판원 순회(TSP) 알고리즘

외판원 순회 문제 (Traveling Salesman Problem)는 조합 최적화 문제의 일종이다.

velog.io


▶ 이어지는 다음 게시글 보기

2024.07.14 - [분류 전체보기] - 공모전 | 서울시 공공자전거 관광지 및 문화시설 추천

 

공모전 | 서울시 공공자전거 관광지 및 문화시설 추천

(팀원1 코드_주피터 노트북) (팀원2 코드_주피터 노트북)5. 관광지 및 문화시설 추천5-1) 각 군집 별 지도 시각화▶ 외국인의 경우, k=2 데이터 사용군집 0 : 본격적으로 따릉이로 여행하려는 외국인

nasena.tistory.com

 

728x90

댓글