2015년 4월 3일 금요일

2015-04: Data Science에 관하여

들어가는 글: 최근에 제가 담당하고 있는 app에 관한 성능 튜닝 업무를 맡게되어 정신이 없었습니다. 평소에는 다루지 않던 data에 대해서 다시한번 생각해볼 수 있는 좋은 기회여서 간단히 정리해보려고 합니다. 


1. Data Sceicne? 




저는 소위 말하는 big data관해서는 잘 모릅니다. 책을 읽어보거나 현장에서 다뤄본 경험이 없습니다. 그 수준에서 봐주시면 됩니다. 

Data Science라는 말을 처음 들었을 때 좀 이상했습니다. Science는 data 가지고 하는 것 아닌가? Methodology와 같이 방법 그 자체에 대한 철학인가? 이렇게 생각하기도 했었습니다. 

Science는 우리말로 번역하면 과학이고 그 특징은 (1) 가설의 수립 (2) data를 측정하여 가설을 지지 (3) 반증이 될 때까지는 사실로 인정.. 정도가 됩니다. 

그러니 국어적으로만 해석하면 Data Science 는 그냥 Science인 것이죠. 

Mechanical engineering은 기계에 관한 과학을 의미하고 Natural Science는 자연 현상에 관한 과학을 의미합니다. 그렇다면 Data Science는 data에 관한 과학일까요? data는 과학을 하기 위한 도구인데 말이죠. 

적어도 제가 알기로는 Data science는 사회 전반에서 digital 도구를 가지고 data를 대량으로 수집하여 그것으로부터 기존에는 알지 못했던 새로운 사실을 알아내는 학문입니다. 그렇다면 Digital Social Science 정도가 정확한 명칭이 되겠네요^^ 

어쨋든.. 제가 말씀드리고 싶은 내용은 관심가는 새로운 용어가 있다면 그것에 대해서 요모조모 뜯어보시기 바랍니다. 새로운 통찰을 얻으실 수도 있습니다.  


2. 오늘은 Data 그 자체에 대해서 얘기해보겠습니다. 




최근에 제가 담당하던 app의 RAM 성능을 개선하라는 mission이 떨어졌습니다. 제가 담당하는 app은 그 하위에 소속된 module (클래스가 아닙니다)이 20개가 넘는 middleware 성격의 app입니다. 당연히 전체의 성능을 개선하기 위해서는 전체적인 개선뿐만 아니라 개별 module에 대한 개선작업도 함께 해야 합니다. 

SW개발자들이 그토록 싫어하는(?) six sigma적으로 접근해보도록 하겠습니다. 

Define : 이 과제를 왜 해야 하는지에 대한 내용입니다. 

목표는 분명합니다. RAM 성능을 개선해라. 잘! .. 이 과제는 잘 define 되었습니다 ㅋ 의미가 있고 멀지않은 시일내에 개선이 이루어져야 합니다. 즉 business requirement가 있습니다. 

Measure : 현수준 측정 

ㄷㄷㄷ 사실 app을 개발하면서 개별 app의 RAM 사용량에 대해서는 크게 이슈가 되지 않습니다. 왜냐하면 app은 UI를 가지고 있기 때문에 사용자가 버튼을 누르고 화면이 뜨고하는 소위 foreground 작업은 mobile phone이 다뤄야하는 최고 중요한 작업이기 때문입니다. 즉, 속도가 잘 나오면 왠만한 app은 메모리를 여유있게 써도 됩니다. 

android에서 어떤 앱(process)의 RAM 사용량을 측정하는 방법은 매우 간단합니다.

  • adb shell dumpsys meminfo <process name> 

PSS라는 숫자가 딱 하고 나옵니다. google에서 제공되는 공통 tool이므로 그 결과 값에 대해서 의심할 필요는 없습니다. 

그런데... 


3. Data 측정이 쉬운 일이 아니었습니다. 



2장의 내용이 다소 전문적인 내용이라 다시 일반적인 내용으로 돌아오겠습니다. 

과학에서 Data 측정이 왜 어렵고 중요한.. 이번에 경험을 해보고 다시금 깨달았습니다. 

위의 사례에서 제가 일주일간 가장 고생을 했던 내용은 

측정할때마다 결과가 다르게 나온다는 것이었습니다. 
똑같은 대상에 대해서 측정 결과값의 범위가 40%가 흔들렸습니다. 

예를 들면 중간값이 1000 이라면  800 ~ 1200 이렇게 나오는 것이죠   

측정도구가 고정된 순간에도 측정 환경에 따라 결과가 달라졌습니다. 

많이 당황했었죠. 그러면 어떻게 해결했을까요? 


4. 표준화 + 경험 모두 필요하다. 


다 아시는게 정답입니다. 그래! 측정방법을 표준화하면 되지!! 

좀더 구체적으로 말씀드리면 

> 측정전 기준값을 맞추고 
> 잘 측정하고 
> 측정후 복귀값이 어느선에서 형성되는지 파악해야 합니다. 

이론적으로는 재현성(reproducibility)라고 해서 어떤 측정자가 측정을 하건 동일한 결과가 나와야 합니다. 하지만 실전에서 해보니 딱 그런건 아니라고 생각합니다. 

어느정도 해당 field에 전문성이 있어야 내가 측정한 값이 noise가 있는지 없는지에 대한 파악이 됩니다. 

특히 측정전 기준값이 흔들리면 아무리 Big data라도 모두 쓰레기 data가 됩니다. 소위 "이 산이 아닌게벼!" 가 되는 것이죠. 

이번 업무를 진행하면서 "과학자"의 노고를 다시 한번 생각해볼 수 있었습니다. 실무진은 과학자가 아니기때문에 100% 순수하게 측정만 하고 있을 시간이 없습니다. 업무의 실적이 발생해야 측정 및 개선의 노고가 정당화됩니다. 


결론: 

이번 경험을 해보고 SW 개발에서도 data를 다루는 기술의 중요성에 대해서 다시한번 생각해볼 수 있었습니다. data, 특히 숫자를 다룬다는 것은 참 어려운 것 같습니다. 숫자가 말해주기때문에 빠져나갈 구멍이 없네요. 

하지만 숫자에는 항상 noise가 포함되어 있습니다. white noise라고도 하고 군내 변동이라고도 하고 통제불능값이라도 부를 수 있습니다. 

전문화와 고도화의 길에는 data가 있기는 한 것 같은데.... <무지 어렵고 ㄷㄷ>
앞으로 data를 잘 다루는 전문가들이 많이 필요해질 것 같습니다. 

감사합니다. 

2015.04.04 @Home