2015년 11월 12일 목요일

여기 어디지? 실내에서 장소 이름을 자동으로 인식할 수 있을까?



[범 지구적 실내 위치 제공을 위한 걸음 - 1]


실내 위치(장소) 인식을 범 지구적(?)으로 제공할려고 하다보니, 장소 인식 시스템은 구축을 위해 필요로하는 사람의 노동력을 최소로 만들수 있는가가 가장 중요한 문제라는 결론에 도달하게 되었다.

가장 좋은 것은 처음 가는 실내 장소에서도 여기가 어디인지 자동으로 인식할 수 있는 시스템을 만드는 것! 그렇다고 휴대폰의 다양한 리소스를 엄청(?) 써서 장소인식을 자동으로 해보겠다 라는 발상은 논문에나 쓸법한 방식이므로 일단 제외를 하고...

이 문제를 놓고 계속 고민해 오던 방식이 있었다. 사람들은 WiFi AP를 설치할때 AP의 이름(ssid)으로 장소와 관련이 있는 이름을 주로 사용하는 경향이 있다. (예를 들어 xxx_house, starbucks, ...) 물론 iptime, olleh 와 같이 장소하고 아무런 관련이 없는 값도 있다. 그런데, 매장들의 경우는 (특히 커피숍, 베이커리 등) 고객들에 편의를 주기 위해 무료 WiFi를 설치하고 자기 매장을 구별할 수 있게 매장 이름을 ssid로 사용 한다 (와이파이 관련 사업하시는 대표님이 오프라인 매장들을 이런 경향이 아주 강하다고 알려 주심 ^^).

때마침 어제 극심한 스트레스를 받고 있던 차, 이를 해결하기 위해 하루 종일 코딩 하기로 결심하면서 그동안 미뤄뒀던 이 일을 해 보기로 했다. 우리 회사는 (로플랫 이에요~) 지난 9월에 거금 300만원을 들여 아르바이트를 통해 서울시내 주요 커피/베이커리/패스트푸드 브랜드 매장 4000여곳을 직접 방문해서 WiFi 신호를 수집했다. 브랜드는 총 24개. 장난아니죠!

다른 브랜드 매장에는 잘 발견이 안 되지만, 특정 브랜드 매장에서만 유독 관찰되는 ssid 가 과연 있을까? 만약 명확한 패턴이 관찰이 된다면, 실제 학습하지 않은 브랜드 장소들도 앞으론 자동으로 인식할 수 있지 않을까?

이 패턴이 있는지 확인하기 위해서 TFIDF (Term Frequency Inverse Document Frequency) 라는 방식을 사용해 보기로 했다. 간략히 설명하자면 TFIDF는 다른 문서에는 잘 없지만 특정 문서에서는 유독 자주 관찰되는 단어를 찾아서 그 문서를 대표하는 키워드로 사용하고자 할때 사용하는 방식이다. 

여기서는 term은 ssid를 조금 손 봐서 (공백, 1F, 2F, -, 등 몇가지 불필요한 정보 삭제) 사용했고, 하나의 브랜드에서 보이는 term 전체 리스트를 하나의 document로 생각했다.

실제 사용한 데이터와 파이썬 코드는 아래 링크에서
와이파이 데이터 및 파이썬 코드 다운받기

자.. 그렇게 해서 우리가 찾은 결과는... (상위 2개만 표시했어요~)

스무디킹
     smoothieking 122.680970654
     lmart 37.1551271931
망고식스
     mangosix 117.962471782
     ohtsamoris 34.0064151724
탐앤탐스
     tomntoms 353.566062149
     tomntoms2 143.976117873
달콤
     dalkomm 67.4360154759
     dkstaff 48.0901373952
배스킨라빈스
     *baskinrobbinsfreewifi 351.874426106
     baskinstaff 316.311356495
설빙
     sulbing 177.466778557
     publicwifi@seoul 37.6269488538
할리스
     hollys 346.06287093
     hollyscoffee 205.464673366
파리크라상
     pariscroissant 47.3940463793
     u+net7063 21.9376604943
투썸플레이스
     twosome 299.706186749
     twosomeplace 108.219123484
롯데리아
     freeu+zone 88.7228391117
     netis 84.2126950537
오설록
     osulloc 54.1014045696
     osullocoffice 34.0064151724
커핀그루나루
     coffine 180.172415342
     coffinestaff 119.309873534
스타벅스
     ollehstarbucks 777.623609645
     starbucksap 763.155045796
카페베네
     bene 432.322186157
     caffebene 179.032554836
폴바셋
     telecop 72.0622928439
     paulbassett 68.4053228807
이디야
     ediya 435.833696014
     ediyacoffee 294.886922454
잠바주스
     jambajuice 50.745192024
     jjgn 25.8583532148
파스쿠찌
     pascucci 309.194823577
     *pascuccifreewifi 260.112876875
던킨도너츠
     dunkin 169.064771011
     *dunkindonutsfreewifi 150.868885425
맥도날드
     현대hcnwifiphone 108.219123484
     mcdonaldsfreewifi 90.071033507
공차
     gongcha 156.376995187
     publicwifi@seoul 66.2951003614
커피빈
     gangnamwifi 108.186485868
     dummy 77.5799315416
엔제리너스
     angelinus 163.497102488
     angel 100.184377114
파리바게뜨
     *parisbaguettefreewifi 576.698454226
     parisstaff 476.708074552

와우....
예상은 했지만... 생각보다 패턴이 아주 잘 나온다... 물론 없는 경우도 있다.


스타벅스가 서울시내 330개 정도, 전국적으로 720개가 있다고 한다. 나머지 절반은 수집하러 다니지 않아도 될 것 같다... 물론, 조금더 분석하고 자동으로 장소 이름을 설정하기 위해선 알고리즘을 더 devise 해 봐야겠지만...


전문가 분들께~
위에 링크를 통해서 실제 서울시내 4000개 장소 데이터를 오픈했습니다. 관심 있으신 분들은 오픈해 드린 데이터를 활용해서 더 좋은 방법들을 찾아볼 수 있을 거 같애요... 그렇게 하신 분들은 저에게도 좀 알려 주세요~~ ^^

댓글 없음:

댓글 쓰기