데이터 분석 기초편_R 회귀분석 및 차트
지난 브런치 글에서 엑셀을 활용하여 ISG(on/off), Eco, Normal 모드 연비 비교 분석해보니, 한계점과 의문점이 있었고, 시각화된 결과를 보고 싶었습니다.
1. Eco, Normal (Comfort) 모드의 평균 연비 비교만으로 연비가 비슷하다고 말할 수 있을까?
2. 연비에 가장 영향을 주는 무엇이고, 이를 시각화해서 볼 수 있을까?
이 질문은 사실, "평균값이 Mode 별 연비를 대표할 수 있는 것인가?"에 대한 질문이다. 이를 해결하기 위하여 아래의 방법들로 분석을 시도하였다. 재밌는 결과들을 얻을 수 있었다.
1) 다양한 분석을 위해 일단 그간 수집한 엑셀 파일을 데이터 프레임으로 만들었습니다.
- 총 46개의 object와 22개의 변수가 확인되었다. (아직 데이터가 많이 부족하다)
데이터 프레임 구조는 대충 이렇다.
2) 연비에 영향을 미치는 주행시간, ISG, Mode(Eco, Normal)을 한 번에 시각화해서 살펴보자.
위 데이터 프레임을 활용하여 그동안 엑셀로 단편적으로 보았던 데이터를 약간은 입체적으로 보기 위해 아래 산포도를 그렸다.
Eco 모드일 때 가장 최상의 연비로 15 이상이 기록되었지만 (분홍색 삼각형, 제일 큰 원), 크게 의미 있지는 않았습니다.
전체적인 해석으로 같은 거리를 주행하니 주행시간이 길어질수록 연비는 낮아지고, 출근 시간은 거의 30~35분 내외이며 (최빈값), ISG off 인 경우의 연비가 추세선 위쪽에 많이 있고 (동그라미), 대부분 평균 연비는 13~14km/l 내외임을 알 수 있습니다(원의 크기). 보다 자세한 분석을 위해서 추가 분석을 이어갔습니다.
2) Eco, Normal 연비를 평균값의 비교만으로는 정확한 비교가 되지 않으니, boxplot을 그려서 최대/최솟값, 중앙값, 분산, 평균으로 비교해보자.
엑셀로 확인할 수 없는 명확한 차이점인 평균값으로 구분이 안 되는 것을 발견했다. 바로 Eco 모드의 연비는 분산이 매우 크다. (물론 엑셀로 분산 값을 구하는 함수를 사용해도 되지만, 시각화해서 보니 더욱 명확했다)
Eco 모드인 경우에는 주행 환경과 운전 습관에 민감하다?? Eco 모드일 때 연비의 최댓값과 최솟값이 있고 사분범위도 Normal에 비해 넓다. Eco 모드인 경우 연비의 분산이 크다. Normal에 비해 Eco 모드는 운전 습관은 거의 동일하니, 주행환경에 다소 민감한 것 같다. 하지만 두 그룹 간의 평균값, 중앙값의 차이는 없다고 볼 수 있다. (box plot 해석은아래 박스 설명 참조)
3) Eco 모드인 경우 분산이 큰 요인은 무엇일까?
먼저 Eco 모드일 때 주행 시간이 어떻게 되는지 분석했다. 놀랍게도 Normal 모드일 때 보다 Eco 모드의 주행시간의 평균값이 작았다. 어떤 이유에선지 Eco는 주행시간이 작았음에도 연비는 Normal과 비슷했다.
일단 Eco 모드의 분산이 큰 이유는 주행시간의 분포 범위가 넓어서 자연스레 연비의 분산이 커진 것이다.
그래프를 보면 주목해야 할게 두 가지가 있다. 이 부분은 Excel에서는 보기 힘든 내용이다. 그래서 데이터 분석은 R로 하는 게 훨씬 효율적이고, 데이터의 숨은 의미도 알 수 있고, 시각화에서 큰 장점을 가진다.
Mode별 주행시간 BoxPlot의 해석
1. Eco 모드일 때 중앙값(상자내 진한 실선)이 작은 이유는 주행시간의 분포 범위 및 사분 범위가 Normal모드에 비해 넓었다. Normal에 비해 주행시간이 짧았을 때가 많았다는 것이다. 즉, 주행시간이 짧은데 연비는 더 높아지지 않았고, Normal 모드와 평균 연비는 같았다.
2. 그림 3. 에서 Eco 모드의 연비가 높은 것은 연비가 높은 최댓값 1-2개 때문에 높아진 것이다. 최빈값으로 보면 Eco 모드는 회귀분석 결과 가장 영향이 큰 주행시간이 작음에도 불구하고 연비의 평균이 같은 것은, Normal 모드에 비해 연비가 낮다고 볼 수 있다. Eco 모드의 자동차 제어는 연비 측면에선 그다지 효율적이지 않은 것 같다. 환경을 고려해선가?
3. Eco의 중앙값이 평균값(마름모)보다 큰 이유는 주행 시간의 최댓값 데이터 1~2개가 주행시간이 긴 값이기 때문이다. 반대로 Normal의 중앙값이 평균값보다 낮은 것은 주행시간이 긴 데이터들이 많았기 때문이다. 주행시간의 평균값, 중앙값이 컸음에도 불구하고 연비도 높은 것은 주행환경에 조금 더 내성을 보이는 것 같고, 운전자의 컨트롤에 따라 자동차가 효율적으로 제어되는 것 같다.
1번 의문에 대한 결론은 Eco/Normal(comfort) 연비 평균값의 비교 만으로는 두 그룹 간의 연비를 비교하기 어렵다. 두 그룹 간 주행시간이 달랐음에도 평균 연비가 같게 나왔기 때문이다. Eco 모드일 때 주행시간이 짧았음에도 연비가 Normal과 같은 것은 Eco 모드가 연비가 별로 좋지 않다는 것이다. 즉, Normal 모드가 연비가 좋다.
1) ISG on vs off 시에 연비와 운행시간의 차이가 있는지 보았다. (오토 스톱 앤 고)
ISG off 일 때 연비가 약간 높지만 두 그룹 간의 연비 차이는 거의 없다고 볼 수 있다. (중앙값 사분 범위 해석은 위 박스 내용 참조)
처음 엑셀로 분석했을 때보다 data가 조금 누적이 되니, 두 그룹 간의 차이는 없어진다. 아마 2달가량의 data를 모으면 더욱 정확해질 것 같다. (향후 빅데이터 분석을 위해 소스코드 정리의 개념으로 수행 중)
운행시간의 평균값은 두 그룹의 차이가 없었다. (두 그룹의 운행 시간 : ~34분, ~33분)
2) 연비에 가장 큰 영향을 주는 변수인 주행시간을 살펴보았다.
x=주행시간 & y=연비의 그래프는 그림 1.에서 작성한 산포도에 회귀 직선을 추가하고 결과를 분석했다.
회귀분석 결과 해석
1. 회귀 직선에 수렴하지 않는 값들이 몇 개 있고 운행시간이 작은 시간의 연비 데이터가 없고 잔차가 크기 때문에 회귀계수(0.558)의 설명력은 크지는 않았다. (eco모드일 때 연비가 좋았던 데이터 2개 때문)
2. 하지만 운행시간이 연비에 미치는 영향은 통계적으로 상당히 유의했다. (p-value = 1.509e-09)
3. 회귀식의 기울기에 의하면 운행시간 1분 증가할 때마다 연비는 0.12km/l로 감소한다.
(우리가 중학교 때 배운 y=ax+b의 뜻을 이해하는 게 회귀식의 기초다. a가 음수이면 y는 반비례, 양수이면 정비례의 관계를 가지며 기울기는 x 값의 변화량에 대한 y 값의 변화량이고, y절편은 x가 0일 때 y의 값이다. 그래서 단순 회귀분석을 일차방정식 선형 회귀분석이라 한다_linear regression)
다중 회귀분석
처음 해봤는데, 엑셀보다 더 알기 보기 나온다. 이 결과를 올리면 더 보기 힘들것 같다는 생각이 들었다. (그래도 data는 그 자체로 가치가 있으니 첨부)
연비에 가장 영향을 주는 것은 운행시간이고, 다른 요인들은 그보다 약했다.
(위 박스 회귀분석 결과 해석 참조)
Pairs 함수를 통해 다중 변수와 연비와의 상관성을 분석했다. 운행시간이 -0.75로 상관관계가 제일 높았고, ISG on/off도 -0.2로 높았다.
결과가 나오기 때문에, 가시화를 위해 GGally를 사용하려고 했으나, jupyter R 버전이 맞지 않았다. 어쩔 수 없이 R gui 설치하고 (studio는 너무 무거워서) 분석을 이어갔다. 다중 회귀분석의 시각화는 할 수 없었고, 다중 변수의 상관 분석 결과로 본 연비 분석 편은 마무리하려고 한다. 결과는 연비/운행시간의 관계의 상관계수가 매우 컸고, ISG on/off도 연비와 유의한 상관관계를 보였습니다.
이미 이전의 결과들을 통해 연비에 영향을 주는 것이 무엇인지는 밝혔고, 본 글에서는 이를 R을 통해 시각화해서 보여주는 것에 의미를 두었다.
ISG를 끄고 (필요시만 잠깐 사용) Normal 모드로 다닐때가 가장 좋다는것~!!
그리고 운행시간이 중요하니, 차가 막히는 시간을 피해서 출/퇴근 ~!!
ps. 데이터 수집은 DAG를 활용했습니다.