스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

28
스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정 2014147575 도회린 2014147583 이정현 2014147528 한호재

Upload: do-hoerin

Post on 12-Apr-2017

484 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

스마트폰 화상 키보드입력 패턴 분석 및 오타 보정

2014147575 도회린2014147583 이정현2014147528 한호재

Page 2: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

진행 일정 및 개요

Page 3: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

프로젝트 진행 일정

10월 11월

시각화

상황예측

데이터 분석

데이터

전처리

오타 개선 알고리즘 제안분석

사용자 상황

분류기 제작 및 최적화

선정 결과

시각화

유의미한 데이터 선정

주 담당자

이정현

한호재

도회린

Page 4: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

프로젝트 진행 환경

• 분석 환경

• OS : Ubuntu 14.04 / Windows 7

• 언어 : Python 2.7.6

• 사용 Python 라이브러리 목록

• numpy 1.10.1

• pandas 0.13.1

• scikit-learn 0.17

• matplotlib 1.5.0

• ipython (notebook 이용) 4.0.1

Page 5: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

용어의 정의

• 상황 : 유저의 자세(앉기, 서기, 걷기, 눕기)와 이용하는 손(왼손, 오른손,

양손)을 교차하여 만들어지는 12가지의 경우.

• 입력 패턴 : 유저가 문자를 입력하는 속도, 누른 좌표, 방향 센서 등의 로그

데이터에 남아있는 모든 정보들로부터 유추되는 경향성.

• 분류기 : Classifier. 입력된 값으로부터 상황을 분류해내는 알고리즘.

Page 6: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

분석 문제 및 목표

Page 7: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

데이터 시각화 및 유의미한 변인 선정

• 주어진 센서 데이터 값들과 유저의 상황간의 상관 관계를 계산하고 이를

시각적으로 도출.

• 사용자의 정보와 오타율의 상관 관계를 파악하고 이를 시각적으로 도출.

• 파악된 상관 관계를 토대로 유저의 상황을 예측하고 그 상황에 맞는 오타

보정 방안 제시에 활용.

Page 8: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

유저 상황 예측

• 앞의 단계에서 파악된 유의미한 상관 관계를 가진 입력 데이터를 활용하여

입력 상황을 예측.

• Scikit-learn 라이브러리에 있는 분류(Classification) 알고리즘을 이용.

• 로그의 일부는 학습(Training), 다른 일부는 검증(Test) 데이터로 이용하여

최적의 분류를 할 수 있도록 튜닝.

Page 9: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

오타 보정

• 키보드 조건, 사용하는 손에 따른 경향성을 파악

• 앞의 단계에서 파악한 입력 패턴과 유저의 상황을 바탕으로, 오타를 최소화

하기 위한 방안을 대략적으로 제시.

• 주어진 로그 데이터를 이용하여, 오타 보정 방안에 따라 얼마나 개선이 이루

어지는지 확인.

Page 10: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

분석 과정

Page 11: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

분석 과정

데이터 전처리 데이터 시각화 및 유의미한 칼럼 선정

상황별 오타 개선 알고리즘 제안 입력 상황 분류기 제작

Page 12: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

데이터 전처리

주어진 데이터는 무의미한 값이 있거나,

일부는 오류가 존재한다. 이를 다음의

기준으로 전처리 하였다.

• 모든 Column의 이름을 소문자로 통일,

앞 뒤의 무의미한 공백 제거

• 120개(손 3 × 자세 4 × 횟수 10)보다

적은 수의 데이터는 삭제

class DataLoader:

data_save = None

threshold = 120

age_useless = []

def __init__(self):

data_save_raw = read_csv('data/save.csv')

# Remove useless whitespace

self.data_save =

data_save_raw.rename(columns=lambda x:

x.strip().lower())

# Remove unsufficient data

data_count = self.data_save.groupby('age').count()

self.age_useless.append(

data_count[data_count < self.threshold].index)

def get_save_data(self):

return self.remove_useless(self.data_save)

def remove_useless(self, data):

for age in self.age_useless[0]:

data = data[data['age'] != age]

return data

Page 13: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

데이터 시각화

• 센서 값들과 사용자의 상황 및 오타

율에 대한 다양한 그래프를 그린다.

• 위의 결과를 바탕으로, 입력 상황 예

측에 명확히 사용할 수 있을 것으로

추측되는 Column들을 선정한다.

matplotlib.style.use('ggplot')

loader = DataLoader()

data = loader.get_sensor_data()

# Set columns

posture_gyro =

data.groupby('input_posture')

.mean()[['gyro_x', 'gyro_y', 'gyro_z']]

# Bar Graph

posture_gyro.plot(kind='bar')

plt.show()

Page 14: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

사용 알고리즘

• Random Forest : 반복적으로 무작위적인 Dicision Tree를 만들어 이를

최적화하는 방향으로 진행하는 알고리즘이다. 뚜렷한 경향성이 있는 데이터

들을 이용하여 간단하고 빠르게 분류기를 만들 수 있다.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(n_estimators=100, max_depth=30, max_leaf_nodes=100)

rf.fit(trainX, trainY)

Page 15: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

입력 상황 예측 소스 코드

for group in range(1, 4):

data_raw = raw_loader.load_eval(str(group))

for idx in data_raw.index:

data = data_raw.ix[idx]

data_sensor = raw_loader.load_sensor_data(data['file name'])

posture = data['input posture']

if posture == 'Both':

posture = 1

elif posture == 'Right':

posture = 2

else:

posture = 0

combined_data.append([posture,

data_sensor.acc_x.var(),

...

data_sensor.gyro_z.mean()])

Page 16: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

오타 보정 알고리즘

ascii_num = 99

hands = ['Both', 'Right', 'Left']

raw_of_all = data_key[data_key['intent_code_point']==ascii_num]

raw_of_alphabet =

data_key[data_key['intent_code_point']==ascii_num][data_key['code_point']!=ascii_num]

result = []

for hand in hands:

data_all = raw_of_all[raw_of_all['input_posture']==hand]

data_all = data_all.groupby('keyboard_condition').count()['time']

data_of_alphabet = raw_of_alphabet[raw_of_alphabet['input_posture']==hand]

data_by_condition = data_of_alphabet.groupby('keyboard_condition').count()['time']

# For each keyboard status

result_both = data_by_condition[data_by_condition.index%4==0].sum()

/ data_all[data_all.index%4==0].sum()

...

result_split = data_by_condition[data_by_condition.index%4==3].sum()

/ data_all[data_all.index%4==3].sum()

result.append([result_both, result_left, result_right, result_split])

Page 17: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

분석 결과

Page 18: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

데이터 시각화 가속도 센서

가속도 센서 변화와 사용하는 손, 자세의 상관관계.

• 오른손 : x축 방향의 가속도가 음의 경향이 두드러짐

• 눕기 : z축 방향의 가속도가 다른 조건에 비해 0에

가까움

양손 왼손 오른손

눕기 앉기 서기 걷기

Page 19: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

데이터 시각화 회전 센서

회전 센서 변화와 사용하는 손, 자세의 상관관계.

• 오른손 : roll의 양의 경향이 두드러짐

• 눕기 : roll의 음의 경향, azim의 양의 경향이

두드러짐

양손 왼손 오른손

눕기 앉기 서기 걷기

Page 20: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

데이터 시각화 자이로스코프

자이로스코프 값과 사용하는 손, 자세의 상관관계.

• 양손 : y축과 z축의 자이로스코프 값이 유사함

• 왼손 : y축의 값 보다 z축의 값이 더 큼

• 오른손 : y축의 값이 z축의 값 보다 더 큼

• 걷기 : y축, z축의 값이 다른 조건에 비해 매우 큼

양손 왼손 오른손

눕기 앉기 서기 걷기

Page 21: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

데이터 시각화 조건 별 오타율

사용 손, 자세, 성별,

이용 기간 등의 모든 변인에서

명확한 상관 관계를 찾기 어려움

Page 22: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

• 위의 데이터 시각화 결과를 종합하여 볼 때, 사용하는 손을 구분할 수 있는

변인들은 충분한 것으로 보인다.

• 자세의 경우, ‘눕기’와 ‘걷기’는 구분하기 명확한 것으로 보이지만 나머지

자세인 ‘앉기’와 ‘서기’는 정확하게 구분할 만한 차이점을 발견하기 어렵다.

데이터 시각화

Page 23: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

입력 상황 예측 결과 사용 손

Random Forest 알고리즘을 이용하여 센서 값을 바탕으로 사용한 손을 예측

한 결과, 약 80.92%의 정확도를 보였다.

Page 24: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

입력 상황 예측 결과 자세

센서 값을 바탕으로 자세를 예측한 결

과, 약 64.26%의 정확도를 보였다.

아래는 실제 값과 예측 결과를 비교한

것으로, 앉은 상태와 서있는 상태를 잘

구분해내지 못하는 것을 알 수 있다.

0 : lie1 : sit2 : stand3 : walk

Page 25: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

오타 보정 알고리즘

• A는 키보드의 가장 좌측에 위치한다.

• 오른손을 사용할 경우 거리가 멀어

우편향된 키보드를 사용시 오타가

개선된다.

알파벳 A

양손 오른손 왼손

오타율

키보드 종류

Page 26: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

오타 보정 알고리즘

• H는 키보드의 중앙에 위치한다.

• 양손 및 오른손을 이용할 경우,

Split 키보드를 이용하면 오타율이

감소한다.

알파벳 H

양손 오른손 왼손

오타율

키보드 종류

Page 27: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

오타 보정 알고리즘

• H는 키보드의 중하단에 위치한다.

• 양손을 이용할 경우 Split 키보드를

이용하면 오타율이 감소한다.

알파벳 N

양손 오른손 왼손

오타율

키보드 종류

Page 28: 스마트폰 화상 키보드 입력 패턴 분석 및 오타 보정

오타 보정 알고리즘

• U는 키보드의 우측에 위치한다.

• 왼손을 사용할 경우 거리가 멀어

좌편향된 키보드를 사용시 오타가

소폭 개선된다.

알파벳 U

양손 오른손 왼손

오타율

키보드 종류