[ 데이터청년캠퍼스 ] 공유 자동차 운행 이상치 판별 with 익명 재현 데이터(1) : 대회 시작 및 주제 선정

박유찬·2023년 2월 10일
0

< 프로젝트 개요 >
주제 : 공유 자동차 익명 재현 데이터를 활용한 이상치 판별
기간 : 2022.08.01. ~ 2022.08.25.

대회 시작 - 첫 데이터 분석 프로젝트

군대 복무 기간 동안 판다스를 시작으로 머신러닝, 딥러닝을 맛보기도 하고 이것저것 데이터 분석에 관해 독학을 했다. 이론적인 부분에 대해서 지식을 꽤나 얻었다고 생각은 했지만, 군대라는 특성 상 노트북으로 실제 코드를 작성하기도 어려웠고, 누군가와 협업을 해서 팀 단위의 프로젝트를 진행하기도 버거운 상황이었다.

복무를 모두 마치고, 이제 드디어 팀 프로젝트를 할 수 있는 상황이 되어 여기저기 어떤 프로젝트나 공모전이 있나 찾아봤지만 아직 공모전을 한번도 해보지 않았기에 막연한 두려움도 있었고, 혹여 팀원들에게 민폐가 되지 않을까 하는 생각에 성적이 우선인 대회보다는 프로젝트와 동시에 교육 프로그램이 함께 들어가있는 활동을 찾아보았다.

그러다가 데이터 청년 캠퍼스라고 한국 데이터 산업 진흥원에서 주최하는 교육 프로그램인데 커리큘럼이 딱 내가 원하는 방향성과 맞았고, 심지어 연세대학교에서 프로젝트를 진행중이어서 곧바로 신청하게 되었다.

연대에서는 위와 같은 과정으로 진행을 했는데 Spark로 빅데이터 처리하는 부분 빼고는 배우고자 하는 방향과 맞는 거 같아서 일단 신청을 했다!

주제 선정

일단 프로젝트는 자유 주제로 진행이 되었고, 한 달동안 배운 내용(머신러닝, 딥러닝에 관한 전반적인 내용)을 바탕으로 팀원끼리 자유롭게 주제를 선택해서 프로젝트를 진행하면 되었다.
교수님이나 조교님이 가끔 도움을 주시거나 조언을 해주셨지만, 거의 강의실만 제공한다고 해도 무방할 정도로 방치(?)를 하셨고, 덕분에 너무 너무 자유롭고 편안한 분위기에서 프로젝트를 진행할 수 있었다.

주제는 크게 두 갈래로 나뉘었다.
1. 진짜 하고 싶은거 알아서 정하기
2. 기업에서 익명 재현 데이터 받아서 받은 데이터로 주제 정하기

이렇게 두 가지가 우리의 선택지였고, 처음에는 하고 싶은 걸 해보자 싶다가도 지금 이런 기회가 아니면 언제 실제 기업 데이터, 그것도 익명 재현이 된 특별한 데이터를 다뤄볼 수 있을까라는 생각이 들어 2번으로 진행을 하게 되었다.

익명 재현 데이터란?
실제 데이터에 차분 프라이버시를 적용해 식별 불가능하게 만든 데이터이다.
실제 기업에서는 개인정보 문제 때문에 실제 데이터를 그대로 사용하지 못하고 이렇게 가명화 작업을 거친 후 사용해야 한다고 한다.

공유 자동차 운행 익명 재현 데이터

익명 재현 데이터에 대한 설명을 듣고 처음에는 단순히 '아 그냥 간단한 전처리 과정을 통해서 식별만 안되게 한거구나'라고 생각했다.

약 6개 정도의 기업에서 익명 재현 데이터를 제공했고, 우리는 그 중에서 공유 자동차 렌터카 기업의 데이터를 받게 되었다. 사실 처음부터 공유 자동차 운행 데이터를 받은 건 아니고, 다른 기업들에서 제공한 데이터는 데이터 양도 부족했고, 무엇보다 쓸 수 있는 feature들이 너무 부족했다.

공유 자동차 운행일지 데이터 스키마

세부 주제 선정

데이터셋에는 가장 먼저 운행의 위도, 경도가 나오기 때문에 운행 위치를 먼저 파악할 수가 있었다. 또한 구간 속도별로 몇초를 유지했는지가 기록되기에 운행 경로와 그 경로에 대한 속도 유지 시간을 파악할 수 있다.

처음에는 전기차 잔량을 보고, 같은 거리라도 더 빠르게 과속을 해서 간다면 배터리가 많이 달지 않을까라는 가정 하에 실험을 해보려고 하였다. 하지만 이용자가 운행 중간에 배터리 충전을 했는지에 대한 여부가 없어 해당 주제는 진행하지 못하게 되었다.

초기 주제 : 구간에 따른 운전자의 운전 성향을 파악하자!

여러 고민 끝에 결국 정하게 된 주제는 운전자의 성향을 파악하는 것이다.

티맵 운전자 안전 운행 점수

티맵의 안전 운행 점수처럼 처음에는 운전자의 성향을 파악해서 점수화를 하는 것이 초기 주제였다.

데이터의 한계

하지만, 주행 데이터를 자세히 본다면 속도별로 몇초를 유지했는지만 나오지, 어떤 도로에서 어떤 속도로 달렸는지는 알 수 없다.
즉, 어린이 제한 속도 구간에서 시속 60으로 달린 사람이 고속도로에서 시속 80으로 달린 사람보다 안전한 저속 운행을 했다고 할 수 없다는 것이다.

구간을 알 수 있다면?

그래서 생각한 방법이 구간을 한정 짓는 것이다. 만약 특정 구간이 몇 km 제한이며, 자동차들이 평균적으로 운행하는 속도를 알 수 있다면 운행 데이터를 톡해 과속 성향을 가졌는지, 저속 성향을 가졌는지 파악할 수 있기 때문이다.

실제 경로 찾기 - 길찾기, 내비게이션 사용!

하지만 현재의 정보는 출발 위경도와 도착 위경도이다. 하지만 실제 도로 주행은 실선으로 위경도를 이은 직선으로 표현되는 것이 아니며, 운행 거리가 길어질수록 직선 경로와 더욱 더 상이한 모습을 나타낸다.
따라서 실제 주행 경로를 확인하기 위해서는 위도 경도를 토대로 내비게이션 또는 길찾기를 활용해야 했다.

API는 사용 불가

가장 간단하게 할 수 있는 방법을 찾으며 API를 사용하고자 했다. 요청해야하는 데이터의 개수가 50만개를 넘어가서 무료 API로는 한계가 있었다. 결국, 고민 끝에 API는 사용하기 어렵겠다는 결론을 내렸다.

네이버 길찾기 API : 무료 제공 x
카카오 길찾기 API : 무료 제공 x
구글 맵 API : 한국에서 길찾기 자체를 지원 x

셀레니움으로 실제 경로 획득

어쩔 수 없이 크롤링을 진행했다. 결론부터 말하자면 성공하기는 했지만, 너무 많은 시간과 노력이 소요되었고 전처리 과정도 굉장히 까다로웠다.
크롤링 방식을 요악하자면, 가지고 있는 위경도의 좌표를 네이버 길찾기에 입력하여 나온 자동차 이동 경로 및 제한 속도 등의 정보를 가져오는 것이다.
하지만 여기서 문제가 네이버 길찾기 입력란에는 위경도 좌표를 직접 입력해서는 안되고, 구글맵 API의 Inverse Geocoding을 통해서 실제 주소로 변환해서 넣어야 했다.

Geocoding을 통해 얻은 실제 주소 값을 셀레니움을 통해서 네이버 길찾기에 입력해서 나온 결과를 수집했다. 하지만 Geocoding은 google에서 제공하는 것이다보니 반환된 주소가 네이버에 뜨지 않는 경우도 너무 많았고, 경우에 따라 길찾기 결과값도 달라 크롤링에 수 많은 예외처리가 필요했다.

구간 확정하기

구간 한정 짓기
1. 매우 짧은 운행거리 데이터만을 사용. 그래야 특정 구간 한 두개만 나오니까
2. 위경도 사용해서 짧은 운행 거리로 필터링을 해도, 굉장히 산발적으로 이곳저곳에서 운행이 발생함.
3. 자세히 보니 김해 공항 근처에서 짧은 운행 데이터가 굉장히 높은 빈도로 등장하는 것을 볼 수 있어서 타겟으로 정함.


왼쪽 위를 자세히 보면 공항 근처에 짧은 운행 선들이 모여있는 것을 확인할 수 있다.

김해공항 앞을 타겟으로!

짧은 운행 길이, 공항 앞은 사고 다발 지역, 충분한 데이터 수. 모든 조건이 만족스럽게 떨어져서 김해공항 앞의 운행 데이터를 바탕으로 이용자의 운전 성향이나 이상치를 판단하는 주제를 진행하기로 결정하였다.

이후 진행 상황은 다음 포스트에서 진행하도록 하겠다.

profile
찬찬유유

0개의 댓글