[django] 데이터 분석 웹 프로젝트

kangjuju·2023년 6월 27일
0

project

목록 보기
3/3

분석 프로젝트 개요

  • 서울시 공공자전거 데이터 기반모델 이용, 제주도 대여소 입지 추천 서비스

    • 서울 공공자전거 대여소 위치가 최적의 장소라 가정하고, 이를 기반으로 제주도에 공공자전거 대여소 입지 선정 장소를 추천합니다.
    • 다른 지역들은 서울시 만큼 활성화가 되어있지 않기에, 다른 지역에서도 공공자전거 대여소를 증설한다고 한다면 활성화가 잘 되어있는 서울시 자전거 대여소 위치를 분석한 모델을 기반으로 신규 공공자전거 대여소 입지를 선정하고자 합니다.
  • 기대효과

    • 대여소를 추가적으로 설치함으로써 관광객 유입에 도움이 될 수 있습니다.
    • 이러한 분석 로직은 대여소 뿐만이 아닌 부동산, 상권 등 입지추천에 응용이 가능합니다.

기획 및 설계

  • 업무 기능 분해도
    • 기능 분해도를 작성,
      크고 작은 문제에 대해 분해하며 설계 후 접근하여
      소프트웨어 시스템의 기능을 명확히 시각화 하며 팀원들과 함께 이해하고 협업 효율성을 향상 시켰습니다.

  • 자료 흐름도(Data Flow Diagram)
    • 사용한 기술, 서비스 이용시 데이터에 대한 흐름도를 작성했습니다
      @ 중요 특징 부각, 중요하지 않은 특징 생략
      @ 위험부담 최소화, 사용자 요구사항의 빠른 수렴
      @ 이해 확인, 문서화

분석

모델 학습을 위한 데이터 변수 설정, 수집

  • 데이터 변수 설정

    • 서울 시설공단 공공자전거 운영처의 자료를 참고, 대여소 설치기준이 강조된 부분 위주로 설치되었다는것을 확인 할 수 있습니다.
    • 대학교,관광지,자전거도로, 정류장,공원, 유동인구 6개 선정

  • 서울 데이터 수집1 (대여소 / 주변 시설)

    • 서울시 공공데이터 + API를 이용하여 서울시 대여소, 대여소 별 대여건수, 상기한 서울시 5가지의 시설데이터를 취합하였습니다.
  • 서울 데이터 수집2 (유동인구)

    • 주 이용 층 (20~49세)이 전체이용수의 약 70%를 차지한다는 것을 알 수 있습니다.
    • 유동인구 범위를 20~40대로 제한하여 데이터를 수집했습니다.
  • 학습용 데이터 전처리

    • Euclidean 거리계산 함수를 이용하여 서울시 약 3000개 대여소와 각 대여소로부터 5가지 시설별 최단거리를 도출 (독립변수)
    • 자치구별 유동인구 추가. (독립변수)
    • 대여소별 대여건수 (종속변수)

예측을 위한 제주 데이터 수집

  • 서울 X feature와 동일하게 제주도의 시설데이터, 유동인구 데이터를 수집.

전처리 데이터 확인

  • X Feature 상관관계 확인
    • SeoulDataFrame.corr()
      정류장 : -0.185685
      자전거도로 : -0.166822
      관광지 : -0.120692
      유동인구 : 0.097263
      대학 : -0.833141
      공원 : -0.082358
      순으로 대여건수(Y)에 강하게 영향을 미친 것을 확인 할 수 있었습니다.
  • 기타 사항

    • 유동인구 Feature 표준화
    • 결측치 처리
    • 이상치 제거 (대여수 24만 이상)
  • 다중 선형 회귀 분석

    • 아래와 같은 형태로 모델을 생성, 다중선형 회귀분석 보고서를 확인해봤습니다.
    • 독립변수들과 종속변수간에 인과관계가 있으나 설명력이 7%로 약하고, 모델이 유의하기 때문에 입지추천에 대여수를 점수화 하는 로직이 아닌 범주화 하는 방법을 검토해보았습니다.
  • 범주화 라벨링 여부
    추천: 상위10% / 보통: 10%~80% 구간 / 부적합: 하위20%

  • 모델 분석 비교

모델정확도(Train)정확도(Test)결과
LogisticRegression70%68%'적합' 예측 못함
K-NN(n=3)80%65%예측비율이 가장 적합
Random Forest100%67.1%'적합' 예측률이 낮음
Xgboost(depth=5)100%60%'적합' 예측률이 낮음
MLPClassifier71.4%68.6%정확도는 준수하나, '적합' 예측못함

모델들을 서비스에 적용해본 결과 K-NN모델이 가장 적합하게 예측해 K-NN을 선택했습니다.

  • 서비스 이용시 예측과정
    • 사용자가 임의지점을 3곳을 선택,
      서버에서는 선택한 위경도 데이터를 받아 제주 시설,유동인구 데이터와 취합하여 각 지점별 최단거리를 계산합니다.
      이는 모델의 X값으로 전처리 되어 입력되고, 모델은 Y예측값(대여수)를 반환합니다.

결과 확인 후 모델 문제점 개선

  • 현상1 : 임의 지점 선택시 전반적으로 서울시의 feature값 보다 높은값이 도출.

    • 원인1 : 제주도는 서울보다 문화시설의 밀집도가 낮음.
    • 원인2 : 자전거도로를 지도에서 보면 해안가, 시 근방에 몰려있음.
    • 조치 :
      @ 자전거도로 feature -> 해안가로부터 떨어진 산에 가까울수록 낮게 나오도록, 자전거 도로 근방에 있어야 높게 나오도록 거리를 늘림.
      @ 그외 feature -> 서울시 학습데이터의 최대값을 기반으로 거리를 축소함.
  • 현상2 : 독립변수에 유동인구 추가 시 좁은 구간 내 심해지는 편차값

    • 원인 : 제주 관광지 특성상 유동인구 비율이 많고, 지역간 유동인구의 편차가 커 영향도가 커짐
    • 의견 : 서울 - 제주간 유동인구 특성이 다름을 인지했다. 표준화를 한 데이터를 축소 사용하는것은 유의미 하지 않다고 판단.
    • 조치 : @유동인구 X feature 삭제

서비스 이용

가비아에서 도메인 네임을 구입. 호스팅영역 생성.
AWS Route53을 이용하여 사이트 URL을 생성했습니다.
bestjejubike.shop

  • 메인화면

    • 부트스트랩을 사용해 UX/UI 최적화.
    • 메인 분석기능에 집중한 웹 디자인
  • 분석지도 페이지

    • [메인지도 - 카카오 API활용]
      • 사용자는 카카오 API 지도에서 사용자가 직접 3개의 지점을 지정합니다.
      • 분석버튼을 누르면 API로부터 각 지점별 위경도, 주소데이터를 전달받습니다.
    • Euclidean 거리계산함수를 사용하여 가장 가까운 시설 5가지로부터의 최단거리를 예측모델의 X값에 입력될 데이터프레임으로 가공합니다.
  • 분석결과 페이지

    • 분석결과를 테이블에 출력. 각 장소명을 클릭하여 지점별 분석결과에 대한 시각화 자료를 표시하게 했습니다.

    • 각 지점별 수치는

    • 각 지점 분석결과를 버튼이벤트로 처리. jquery, AJAX 를 이용하여 비동기방식으로 Chart.js로 시각화하도록 했습니다.

    • 로그인서비스를 이용중인 사용자는 이 분석결과를 저장할 수 있습니다.

  • 회원별 분석 이력 페이지

    • 파이썬 paginator 모듈을 사용하여 페이징처리를 간편하게 했습니다.
    • 이 페이지 또한 장소명을 클릭하여 시각화 자료를 확인이 가능하며, 비동기 통신으로 등록날짜를 기준으로 오름차순,내림차순 정렬을 구현했습니다.
  • 모든 DB 클라우드 서비스는 AWS RDS mysql을 사용하였습니다.

0개의 댓글