너와 나의 연결고리(feat. 연관분석)

“너와! 나의! 연결! 고리! 이건! 우리! 안의! 소리!”

이 노래 가사는 2014년 한국 힙합씬 최대의 이슈 트랙중 하나인 일리네어 레코즈의 연결고리 라는 노래 중 메인 플로우의 한 부분이다.

이 노래의 가사 절반 이상이 저 가사로 가득 차있다. 아마도 연관관계가 없어보이는 너와 나를 이어주는 공감대을 찾고 싶어 했던 것 아니였을까 싶다.

이렇듯, 우리는 언제나 연관관계가 없어보이는 것들 사이에서 접점인 연결고리를 찾고 싶어 한다. 주변 사람들에 대해서도 물론이고 자신이 가지고 있는 물건, 취향들 심지어는 행동까지 연관지어 생각한다.

특히나, 최근에는 디지털 뉴딜이니 데이터 댐이니 하는 이슈로 인해서 데이터에 관심이 집중되고 있고, 이러한 영향으로 자신이 가지고 있는 다양한 데이터 속에서 연관된 규칙을 찾고자하는 사람들이 늘어나고 있다.

게다가 요즘 핫한 AI라는 것이 무의미해 보이는 데이터 속에서 의미 있는 패턴(연관규칙)을 저절로 찾아 준다고 하니, 꼭 한번 해보고 싶을 것이다.

그렇다면, 연관 분석(Association Analysis)이 무엇인지 개념부터 사용법까지 하나씩 알아보자.

경영학에서는 장바구니 분석(Market Basket Analysis)으로 알려진 연관분석은 ‘전체 영역에서 서로 다른 두 아이템 집합이 어떠한 조건과 반응의 형태(if – then)로 발생하는가’ 를 일련의 규칙으로 생성하는 방법(혹은 알고리즘)이다.

예를 들어 ‘아메리카노를 마시는 손님중 10%가 브라우니를 먹는다.’라고 하거나 ‘샌드위치를 먹는 고객의 30%가 탄산수를 함께 마신다.’ 과 같은 식의 결론을 내는 것이다.

이런 규칙성을 많이 사용하는 분야는 대표적으로 판매업이 있다. 고객이 어떤 상품을 고르면 그 상품을 구매한 다른 고객들이 선택한 다른 상품들을 제안해 준다던지 하는 컨텐츠 기반 추천의 기본이 되는 것이다.

그럼 이제, 이러한 연관 분석을 하기 위해 사용되는 데이터부터 살펴보자, 동네 카페 매출이력(transaction)이 다음과 같이 주어졌다고 생각해보자.

거래번호품목
1154아메리카노
아이스 카페모카
허니브래드
블루베리 치즈케이크
치즈 케이크
1155카라멜 마키아또
브라우니
크림치즈 베이글
1156아메리카노
탄산수
크랜베리 치킨 샌드위치
1157아메리카노
카라멜 마끼아또
허니 브래드

위 데이터에서 각 고객이 구입한 품목들을 확인 할 수 있는데, 데이터의 연관규칙을 찾기 위해서는 다음과 같이 희소행렬(Sparse Matrix)로 나타내 주면 좋다.

아메리카노아이스 카페모카카라멜 마키아또탄산수블루베리 치즈 케이크치즈 케이크허니 브래드브라우니크림 치즈 베이글크랜베리 치킨 샌드위치
11541100111000
11550010000110
11561001000001
11571010001000

이제 연관규칙을 찾을 준비는 되었다. 조건과 반응 형태로 규칙을 만들면 되는데, 다음과 같이 규칙을 만들 수 있다.

  • 아메리카노를 마시는 사람은 아이스 카페모카도 마신다.
  • 아메리카노를 마시는 사람은 치즈케이크도 먹는다.
  • 아메리카노를 마시는 사람은 허니 브래드도 먹는다.
  • 아메리카노를 마시는 ….

“어?! 뭔가 이상하게 생각 했던 것과는 다르다. 뭔가 그럴듯하게 맞아 떨어지는 규칙은 아니네?” 라고 생각 들것이다.

그 생각이 맞다. 이런식으로 규칙을 만든다면, 주어진 데이터에서 무수히 많은 규칙을 만들어 낼 수 있다. 우리는 이 많은 규칙들 가운데서도 좋은 규칙을 찾아 내는 방법을 알아야 한다.

그렇다면, 좋은 규칙은 어떻게 찾을까?

좋은 규칙을 판단하기 위해서 규칙의 효용성을 나타내는 지표는 지지도(Support)신뢰도(Confidence) 그리고 향상도(Lift)이다. 이 3가지 지표를 모두 반영해 규칙의 효용성을 판단하고 좋은 규칙을 선택해야 한다.

이 3가지 지표를 구하는 방법은 다음과 같다.

  1. 지지도(Support)
    • 전체 거래 중 품목 A와 품목 B를 동시에 포함하는 거래의 비율로 정의한다.
지지도 공식
  1. 신뢰도(Confidence)
    • 품목 A를 포함한 거래 중에서 품목 A와 품목 B가 같이 포함될 활률이다. 연관성의 정도를 파악할 수 있다.
신뢰도 공식
  1. 향상도(Lift)
    • A가 구매되지 않았을 때 품목 B의 구매확률에 비해 A가 구매됐을 때 품목 B의 구매활률의 증가 비(Rate)이다. 연관규칙 A -> B는 품목 A와 품목 B의 구매가 서로 관련이 없는 경우에 향상도가 1이 된다.
향상도 공식

이제 좋은 규칙을 고르는 법도 알았으니 실제로 제대로 된 규칙을 찾아 보자.

가능한 모든 경우의 수를 탐색하여 지지도, 신뢰도, 향상도가 높은 규칙을 찾을 수 있다면 가장 이상적일 것이다. 데이터가 작으면 가능할지도 모르겠지만, 데이터가 증가 하면 할수록 계산에 드는 속도도 기하급수적으로 늘어나게 된다.

(알고리즘의 데이터 증가에 대한 복잡도는 n^2이다.)

이러한 이유로 자주 발생하는 아이템에 대해서 빈발 집합(Frequent item sets)을 만들고 이 집합만 고려하는 규칙을 만드는 것이 효율적이다.

예를들어 품목 탄산수의 지지도, 즉 P(탄산수)가 0.1로 나타났다고 보면, 탄산수를 포함한 품목의 지지도는 아무리 높아도 0.1을 넘지 못할 것이다. 탄산수가 단독으로 등장할 확률인 P(탄산수)는 아무리 크게 나와도 P(탄산수, 아메리카노)를 넘지 못 할 것이기 때문이다. 이때 {탄산수, 아메리카노}는 {탄산수}, {아메리카노}의 초월집합(Super set)이라고 한다.

임의의 품목 집합의 지지도가 일정 기준을 넘지 못한다면 해당 집합의 초월 집합의 지지도는 그 기준보다 무조건 더 작을 것이기 때문에 유용한 규칙으로 선택 될 수 없다. 이처럼 최소 지지도 요건을 만족하지 못하는 품목 집합의 규칙을 애당초 제외하면 계산의 효율성을 높일 수 있다.

빈발관계 탐색

그럼 다시 연관 규칙분석을 수행해보자. 최소 지지도 요건을 0.3으로 설정했다고 하자. 그럼 각 품목의 지지도는 아메리카노(0.75), 아이스 카페모카(0.25), 카라멜 마키아또(0.5), 탄산수(0.25), 블루베리 치즈 케이크(0.25), 치즈 케이크(0.25), 허니 브래드(0.5), 브라우니(0.25), 크림 치즈 베이글(0.25), 크랜베리 치킨 샌드위치(0.25)로 나타낼 수 있다.

여기서 최소 지지도를 만족하지 못하는 것들을 제외하여 2개짜리 품목 집합을 생성하면, 다음과 같다.

아메리카노카라멜 마키아또허니 브래드
아메리카노00.250.5
카라멜 마키아또00.25
허니 브래드0

여기서도 마찬가지로 품목 {아메리카노, 카라멜 마키아또}와 {카라멜 마키아또, 허니 브래드}는 최소 지지도 0.3을 만족하지 못하였으니 제외 한다. 이런 방식으로 더 이상 최소 지지를 만족하지 못하는 집합이 없을 때까지 품목 집합의 크기를 1씩 증가 시켜가면서 반복 수행 한다.

이러한 방식으로 구한 동네 카페 매출이력 4건을 토대로 가장 좋은(강한) 연관 규칙은 “아메리카노를 마시는 사람은 허니 브래드도 동시에 먹는다.”가 되는 셈이다.

조건절결과절지지도신뢰도향상도
아메리카노허니 브래드0.50.671.33

여기까지, 연관관계 분석 방법에 대해서 알아보았고, 연관 분석을 통해서 그냥 눈으로만 봐서는 알 수 없었던 거래 데이터에서 규칙을 찾아 낼 수 있었다.

이 외에도 연관 분석 방법은 거래 데이터 뿐만 아니라 순차적이고 반복적으로 발생하는 대부분의 데이터에 적용 할 수 있다.

  • 운영하는 홈페이지에서 어떤 순서로 컨텐츠를 클릭 하였는가?
  • 특정 직무의 사람들은 어떤 순서로 일을 하는가?
  • 특정 문서에 출현한 단어들이 어떤 유의미한 의미로 요약 될 수 있는가?

위의 예 처럼 생각해 볼 수록 많은 응용점들이 있을 거라 생각한다. 한번 자신이 가지고 있는 데이터를 이용하여 각 특성들이 어떤 연결고리가 있는지 분석해 볼 수 있을 것 같다.

있을 수도 있고 없을 수도 있습니다.

갑자기 앞뒤도 없이 “있을 수도 있고 없을 수도 있다.”니 이게 무슨 말인가 싶을 것이다. 이번 글은 양자컴퓨터에 대한 이야기를 다루어 보려고 하는데, 양자컴퓨터의 원리인 양자역학의 불확정성 원리를 쉽게 표현한 말인 것 같아 사용하였다.

사실, 이 말을 들어도 전혀 쉽지않다는 것을 안다. 미국의 천재 물리학자 리처드 파인만은 양자역학에 대해서 “양자역학을 제대로 이해하는 사람은 나를 포함해 아무도 없다”라고 말할 정도로 양자영학은 난해한 주제이다. 하지만 현재 양자역학은 컴퓨터의 주요 부품인 반도체 동작 원리에 사용는 등 점점 우리의 현실세계로 다가 오고 있다. 이런 점에서 전부를 다 알지는 못해도 기술의 발전의 흐름을 이해가기 위해서라도 한번쯤 알아볼 필요가 있다.

Quantum Computing

“우선, 양자컴퓨터를 설명하기에 앞서 기본 원리가 되는 “양자역학”에 대해서 알아보자. “

제일 먼저, 양자역학(Quantum mechanics)이라는 용어 의미를 살펴볼 필요가 있다.

양자역학이란 단어는 양자라는 단어와 역학이라는 단어 2개가 합쳐져서 만들어진 용어이다. 여기서 양자(Quantum)는 양을 의미하는 Quantity에서 온 말로, 어떤 물질이나 에너지양이 띄엄띄엄 떨어져 불연속적으로 존재하는 것을 가리키는 말이다. 역학(Mechanics)은 외력을 받고 있는 물체의 정지 또는 운동상태를 설명하는 학문이다. 간단히 말해 양자역학(Quantum mechanics)“불연속적으로 띄엄띄엄 떨어진 물질이나 에너지양이 외력을 받으면 어떤 운동을 하게 되는지 밝히는 학문”이라고 할 수 있다.

이렇게만 말하면 우리가 학창시절 배운 F=ma라는 개념하고 크게 차이가 없어 보인다. 거시적인 관점에서는 이런 이해가 맞다. 하지만 양자 역학은 분자, 원자, 전자, 소립자 등을 다루는 미시적인 세계의 현상을 다룬다는 것이 특징이다.

미시적인 세계에서는 아무리 기이하고 터무니없는 사건이라 해도, 발생 확률이 0이 아닌 이상 반드시 일어난다. 이는 F=ma로는 설명이 안된다.

“아니 잠깐만… 발생 확률이라니 이건 또 무슨말인가?”

F=ma는 뉴턴의 운동 법칙으로 고전물리학의 대표적인 공식이다. 이는 모든 질량(m)을 가진 물체가 가속도(a)를 가지고 움직이면 힘을 계산해 낼 수 있다 것을 의미한다. 즉, 모든 물체는 현재의 운동상태와 힘을 받는 요소에 의해서 예측가능하다는 개념이다.

예를 들어 보자, 축구선수가 골대를 향해 공을 힘껏 찼을때, 골키퍼는 공의 운동방향을 판단해서 날라오는 공을 막으려고 할 것이다.

공의 위치 따른 골키퍼의 위치

이때의 현상을 다시 한번 하나씩 집어 보자. 공이라는 물체에 축구선수가 힘을 가해 가속도를 주었고 공은 주어진 가속도에 의해서 골대까지 날아갈 것이다. 이 공이 골대까지 날아가는 것은 예측할 수 있는 것이고 골키퍼는 예측되는 공의 운동방향으로 몸을 움직여 공을 막을 것이다.

말인 즉슨, 고전 물리학에서 힘을 받는 모든 물체는 예측이 가능했었다. 하지만 19세기 후반부터 미시적 세계에서 예측이 불가능한 모순된 현상이 발견되기 시작했다. 대표적인 예가 빛이다. 빛은 파동이면서 동시에 입자인 특성을 모두 갖는다. 그리고 이러한 특성은 중첩된 상태를 한 번에 확인 할 수 있는 것이 아니라 관측되는 순간 결정 된다. 즉, 관측되기 전에는 빛은 입자이고 하면서 파동이기도 한 상태이다가 관측을 하는 순간 파동 혹은 입자의 형태를 띈다.

이 무슨 말도 안되는 소리인가 싶지만, 이것은 실제 실험을 통해서 밝혀졌다.

“이중슬릿 실험의 관찰자 효과”라는 현상인데, 이중슬릿에 전자를 하나씩 쏘면 파동의 특성인 간섭현상으로 인해서 여러 줄이 나타난다. 하지만 똑같이 실험하는 조건에서 이중슬릿을 지나는 전자가 하나씩 지나가는지 관측자가 확인해 가면서 실험하면 빛은 입자의 특성을 나타내며 2줄만 나타난다.

이중슬릿 실험의 관찰자 효과

바로 이러한 부분이 고전물리학에서 설명하지 못한 모순된 현상이며, 양자역학에서도 현상을 설명 할 뿐 결정 원리에 대해서는 아직도 ‘신이 부리는 요술(God’s trick)’ 이라고 부르는 부분이다.

“아무도 이해하지 못한 이런 것을 어떻게 이용해서 컴퓨터를 만들었다는 것일까?”

양자컴퓨터는 큐비트라는 단위를 사용하는데 이것은 양자의 불확정성 원리를 이용한 것이다. 현재 우리가 사용하고 있는 전통적인 컴퓨터는 정보를 비트(0과 1) 단위로 처리하고 저장한다. 반면, 양자컴퓨터는 정보를 0과 1을 동시에 갖는 큐비트 단위로 처리하고 저장한다.

큐비트(QUBIT)를 표현한 블로흐 구면(Bloch Sphere)

예를 들어 목적지로 가는 N개의 길에서 가장 빠른 길을 찾는다고 가정해 보자.

현재의 비트단위 컴퓨터는 N개의 길을 모두 한번씩 가보고 시간이 가장 적게 걸린 길을 찾을 것이다. 하지만 양자컴퓨터인 경우 N개의 길을 동시에 탐색한다. 가장 빠른 길이 관측되기 전까지 모든 길에 있을 수 있는 중첩된 상태이기 때문이다. 그리고 제일 먼저 목적지에 도착한 상태가 관측이 되면, 그것이 가장 빠른 길로 결정되고 나머지 상태는 사라지는 것이다.

N의 크기가 어떻든 1번만 수행하게 되니 기존의 비트 컴퓨터 보다 정보 처리 능력이 엄청나다고 볼 수 있다. 이런 엄청난 연산력으로 통해서 그 동안 슈퍼 컴퓨터로도 풀지 못했던 수학적 난제를 양자 컴퓨터가 해결해 주고 있다고 한다.

실제로 2013년 구글이 선보인 양자컴퓨터 ‘시커모어’는 현존 최고 성능을 자랑하는 슈퍼컴퓨터로도 1만년이 걸리는 난제를 단 200초(약 3분 20초) 만에 풀어버렸다고 한다. 특히나, 이렇게 빠른 연산력 덕분에 인공지능 분야에서는 시뮬레이션을 기하급수적인 속도로 돌려서 학습시킬 수 있게 되어서 많은 연구가 이루어 지고 있다.

“양자컴퓨터는 현재 어느 수준까지 왔을까?”

양자컴퓨터는 아직 해결해야하는 난제가 많이 남아 있다. 기본 단위인 양자를 충분한 시간동안 유지 하기 위해서는 차폐시설이 중요하다. 양자는 외부 환경 변화에 매우 민감하기 때문에 고도의 방음, 차진 설비를 갖춰야 하고 양자를 이용하기 때문에 기본적으로 영하 273도인 절대온도를 유지해야 하는등 아직 일반인들이 사용하는 수준의 상용화는 아직 넘어야 하는 산들이 많다.

하지만 요즘이 어떤 시대인가? 클라우드 시대 아닌가.

Google, IBM, MS, AWS 등 글로벌 클라우드 회사들이 양자컴퓨터에 대한 연구에 뛰어들어 경쟁을 하고 있다. 그리고 아직은 정식 출시는 아니지만 대부분의 글로벌 클라우드 서비스에는 양자컴퓨팅을 경험해 볼 수 있는 클라우드 서비스들를 출시하고 있다.

  • MS – Azure Quantum
  • IBM – Q
  • AWS – Bra-ket
  • Google – Zurich

이러한 추세를 생각해 봤을때, 빠른면 3년 길어도 5년이면 양자컴퓨터에 대한 서비스 들이 본격적으로 나올 것으로 생각 된다. 그리고 이러한 변화는 비트 컴퓨터 환경에서 프로그램을 만들던 개발 패러다임에 많은 영향을 줄 것으로 보인다.

WSL(Windows Subsystem for Linux) Ubuntu GUI 환경 구성

WSL에는 기본적으로 GUI 환경을 제공하지 않는다. 대부분의 경우 터미널로 출력되는 결과물만으로도 작업하는데 별다른 문제가 없지만 간혹 GUI가 꼭 필할 때도 있다.

리눅스의 GUI환경(X-window)은 처음부터 원격실행을 고려하여 Server-Client 구조로 분리하여 설계되었다. 이러한 이유로 GUI를 제공하지 않는 WSL에서도 X-window Server-Client통신에 사용되는 X11이라는 프로토콜을 이용하면 원격으로 GUI환경을 사용할 수 있다.

X-Window 기본개념

원격지가 X-Client가 되고 원격지의 화면을 받는 곳이 X-Server가 된다. 원격지의 실행되는 GUI 프로그램이 X-Client를 통해서 X-Server에게 화면정보를 요청보내면 X-Server는 요청온 정보를 받아 화면을 그려준다.

WSL GUI 환경을 구성하기 위해서는 첫번째로 Windows 10에 X-Window Server로 동작할 Xming 서버를 설치해야 한다.

설치를 완료하고 Xming을 실행하면 시스템 트레이에서 다음과 같이 아이콘을 확인 할 수 있다.

Windows 10 System Tray

다음으로 WSL에 X-Client를 구성해야 한다. 먼저, Machine ID를 생성한다.

$ sudo systemd-machine-id-setup
$ sudo dbus-uuidgen --ensure

ID가 잘 만들어 졌는지 확인해보자.

$ cat /etc/machine-id

잘 만들어 졌다면, 이제 X-Window 패키지와 구성 요소들을 설치한다.

$ sudo apt-get install x11-apps xfonts-base xfonts-100dpi xfonts-75dpi xfonts-cyrillic

마지막으로 GUI 프로그램이 실행될때 그래픽을 출력할 수 있도록 디스플레이 환경변수를 다음과 같이 “.bashrc”에 설정 한다.

$ export DISPLAY=:0
$ source ~/.bashrc

이제 모든 준비가 되었다. WSL GUI 환경이 잘 구성 되었는지 확인하기 위해서 다음과 같이 WSL Shell에 다음과 같이 명령을 실행해 본다.

$ xeyes

잘 구성 되었다면, 다음과 같이 웃기게 생긴 눈달린 창이 나와서 마우스를 따라서 시선을 움직일 것이다.

WSL Ubuntu GUI 환경 구성

이제, WSL에서도 GUI 프로그램을 사용해 보자.

사물이 살아 있다!?

2006년에 개봉한 ‘벤 스틸러’ 주연의 ‘영화 박물관이 살아있다.’는 박물관에서 경비일을 맡게 된 주인공이 밤마다 전시된 인형들이 살아 움직이는 것을 보게 되면서 겪게 되는 사건을 담은 코미디 영화이다.

영화에 나오는 것처럼 박물관에 전시되어 있는 인형들이 실제 생명체처럼 지능을 가지고 움직이는 것은 사실 말도 안되는 일이다. 그렇지만 이런 말도 안되는 일들이 이제는 실제로 일어나려고 하고 있다. 그것이 바로 자율 사물이다.

“사물 인터넷을 뛰어 넘어 사물이 자율적인 지능을 갖는다.”

자율 사물(Internet Of Autonomous Things, IoAT)이란, 사물에 인터넷이 연결되어 정보를 수집하고 교환하는 개념의 사물 인터넷(Internet of Things, IoT)에 AI가 탑제되면서 사물이 자율성을 가지고 움직이게 되는 것을 말한다.

Bring AI to device everywhere

사물 인터넷에 대한 사례로는, 최근 몇 년 사이에 새로 만들어지는 가전 제품들을 생각해 볼 수 있다. 냉장고 내부에 카메라와 각종 센서들이 부착되어 내부를 들여다 보지 않아도 냉장고에 무엇이 있고 상태가 어떤지 알 수 있다. 그리고 에어컨이나 보일러의 경우 온도 조절 기능을 스마트폰을 이용하여 원격으로 사용 할 수 있도록 되어 있어서 굳이 제품별 리모콘을 사용하지 않아도 스마트폰 하나로 모두 제어 가능하다.

이제는 대부분의 가전이 스마트폰 하나로 제어가 가능하다고 볼 수 있다. 그리고 이러한 인터넷이 연결된 사물들, 사물 인터넷(IoT)에 AI까지 탑제 되어 자율성까지 갖게 된 것이 자율 사물이다.

앞서 언급한 IoT가 적용된 사례에 AI를 적용해 보자.

냉장고 내부를 들여다 보는 각종 센서들은 보관된 음식들의 상태를 보고 적정 온도로 설정 하고 음식들을 더 오래 신선도를 유지 하도록 스스로 조절한다. 에어컨이나 보일러의 경우 사람이 사용하는 시간이나 사용성을 학습하여 사람이 신경쓰지 않아도 필요한 때에 적절히 동작한다.

“사물이 자율성을 갖고 협업하기 시작했다.”

각각의 사물이 자율성을 갖기 시작하면서, 자율 사물들 간의 협업도 가능해지기 시작했다. 실제로, 2019년 미국 Georgia 대학교에서는 자율 사물들 간의 협업을 이용하여 무인 농업을 연구하고 있다고 발표 했다.

미국 NRI 프로젝트

아직은 연구 단계이긴 하지만 상용화 되어 농업에 적용 된다면, 사람은 더 이상 농사를 짓기 위해 육체적인 노동을 하지 않아도 수확물을 얻을 수 있게 된다.

급격한 AI 기술 발전에 힘입어 사물의 자율성은 계속해서 강화 될 것으로 보이며, 농업 뿐만 아니라 각종 제조, 물류, 건설 등의 산업에 적용 될 것으로 보인다.

“앞으로의 자율 사물의 미래 산업 전망은?”

자율 사물은 2016년부터 가트너의 미래 산업 전망에 사물인터넷과 기계 학습이라는 형태로 소개 되기 시작하다가 2019년부터는 10대 전략 기술 트랜드에 포함되어, 향후 5년 내 자율 사물 시대가 올 것이라고 전망되고 있다.

또한, 글로벌 시장 조사 기관인 MarketsandMarkets에서는 IoT용 AI 시장이 2019년 51억 달러에서, 2024년에는 162억 달러 규모까지 확대 될 것으로 전망하고 있다.

Attractive market opportunities in the AI in IoT market

자율 사물의 핵심 기반은 AI이다. 현재 AI는 인간이 수행하던 많은 업무를 자동화하는 데 기여하고 있다. 하지만 앞으로는 자동화의 수준을 넘어 사물에 탑재되어 동작하는 온디바이스(on-device) 방식으로 진화되어 업무 절차와 판단 기준을 학습함으로써 인간의 개입 없이 동작하는 자율화를 실현해 나갈 것이다.

현재의 AI 기술은 비록 제한된 범위 내에서만 자율적으로 판단, 의사결정을 할 수 있는 수준에 도달하고 있지만, 앞으로 AI 관련 기술의 꾸준한 투자와 연구 개발로 인해서 더 높은 수준의 자율 사물을 확산시킬으로 전망 된다. 이는 많은 산업군의 업무 생태계의 변화를 의미 한다고 생각되며, 앞으로 어떤 새로운 가치를 발견하고, 적응해 나갈 것인가를 고민해 봐야 할 것 같다.


RPA, 사람과 로봇이 협업하는 시대

RPA는 Robotic Process Automation의 약자로, 사람이 하는 단순 반복 업무를 로봇을 통해서 자동화하는 것을 의미한다. 여기서 로봇이라 하면, 공장 생산 라인의 실체적 기계가 생각이 들겠지만, RPA는 Software로 구현된 전산업무를 위한 로봇이다.

개념적으로 그리 어려운 것은 아니지만, 최근 몇 년간 엄청나게 가파른 성장을 보여주고 있다. HFS 시장 조사기관에 따르면 RPA 시장 규모는 2016년 약 6억 1,000만 달러를 기록한 이래로 매년 평균 40% 성장하여 2022년에는 약 43억 달러 규모로 성장할 것으로 보여진다.

RPA Service and Software Market 2016-2022

무엇 때문에 이렇게 성장하는 것 일까?

그 동안 적용이 어려웠던 일선 업무 환경까지 자동화가 확장 된 것이 크다고 볼 수 있다. 일선 업무 환경(Front Office)은 사람이 판단해야 하는 경우가 많아 정형화가 어렵기 때문에 자동화를 적용하기엔 많은 어려움이 있었다. 대부분 일선 업무들의 자동화라는 것들은 지원 업무(Back Office)를 통해서 처리 결과를 받아 처리하는 형태로 업무가 이루어 지고 있었다.

예를들어, 인바운드 고객 서비스를 처리 한다고 해보자. 고객 서비스 관리 채널을 통해 고객 서비스 내용을 접수한 담당자는 서비스를 요청한 고객에 대한 정보를 내부에서 관리하는 고객 관계 관리(CRM: Customer Relationship Management) 시스템에서 조회/확인할 것이다. 그리고 확인된 고객정보를 기준으로 서비스 내용을 해결하고 최종 처리 결과에 대해서 고객에게 전달하고 같은 내용을 내부 서비스 관리 시스템에 등록할 것이다.

위 예시에서 언급된 CRM 시스템은 일선 업무에서 수작업으로 관리하던 고객 정보를 지원 업무를 통해 관리 정보를 정형화 하고 프로세스 체계를 만들어 고객정보 관리를 자동화 시킨 시스템이다.

즉, RPA 이전의 자동화라는 것은 일선 업무에서 필요한 내용을 지원 업무로부터 자동화 서비스 형태로 제공 받은 것을 말한다. 하지만 RPA가 등장한 이후에는 일선 업무 담당자가 자신이 하는 일에 대한 일련의 과정을 프로세스로 정의만 할 수 있으면 지원 업무를 통하지 않고도 많은 부분 자동화 할 수 있게 되었다.

다시 고객 서비스 예시로 돌아가 RPA를 적용해 보자. 일선 업무 담당자가 고객 서비스를 접수하면 그 순간 자동으로 RPA 로봇이 관련 고객 정보를 수집하여 보여 줄 것이다. 고객 서비스를 하는 데 있어서 선제적으로 고객 정보를 파악할 수 있게 되는 것이다. 그리고 고객 서비스 응대 완료 후 고객에게 답변을 보내면 RPA 로봇이 같은 내용을 내부 서비스 관리 시스템에 자동으로 등록해 줄 것이다. 같은 내용을 여러 시스템에 등록하던 업무를 1회만 하게 되어 업무 효율을 높일 수가 있게 된다.

마치 RPA 로봇과 협업을 하여 업무를 처리 한다고 생각할 수 있다.

일선 업무 담당자가 수작업으로 하던 기간계 업무를 RPA 로봇과 협업하여 생산성을 높일 수 있게 된 것이다. 이러한 이유로 대부분의 산업 분야로부터 지대한 관심을 받게 되었고, 그것이 엄청나게 가파른 성장으로 이어진 것이다.

RPA를 충분히 잘 활용하려면 어떤것들이 준비 되어 있어야 할까?

도입 초반에는 사람의 판단이 필요없는 단순 반복적인 작업이나, 간단한 조회성 잡무들에 적용을 하게 된다. 가장 가까운 예로 내부 관리 시스템(ERP, Groupware 등)에 로그인을 하거나 받은 메일함에서 특정 메일 데이터를 정리하는 것들이 있다. 이러한 것들만 대체되어도 업무를 수행 하는 데 있어서 많은 도움이 된다. 하지만 시간이 갈 수록, 이러한 부분은 한사람이 처리할 수 있는 일의 양을 늘렸을 뿐, 근본적으로 전체적인 업무를 자동화 하진 못하는 한계가 나타난다.

RPA 도입이 충분한 효과를 내기 위해서는 자신의 하고 있는 일련의 업무를 전체적으로 이해하고 자동화 하기 위한 단위 프로세스를 도출해 내는 능력을 키워야 한다. 그리고 도출된 단위 프로세스들을 지속적으로 자동화 컨텐츠로 준비 해두어야만 RPA를 잘 활용할 수 있게 된다.

“앞으로는 AI와 RPA 결합을 통해 초자동화 시대가 될 것이다.”

현재는 사람의 직관으로 판단해야 하는 부분으로 인해서 모든 업무의 과정을 자동화 프로세스로 만들어 내기 어렵다. 하지만 RPA에 AI가 결합 된다면 사람의 개입을 최소화할 수 있고, 업무 효율을 최대로 끌어 올릴 수 있다.

사람과 로봇이 협업하는 초자동화 시대

이전 포스팅에서 다뤘던 자연어 처리에 대한 내용과 연관지어 생각해 보면, 사람의 말을 알아 듣는 챗봇사람이 하던 업무들을 자동으로 처리하는 RPA 로봇의 조합을 생각해 볼 수 있다. 그리고 이러한 생각은 수 년 내에 우리의 일상에서 접할 수 있을 것이라 본다. 로봇과 일상적인 언어(자연어)로 대화하고 자동으로 처리된 결과물을 받아보는, 사람과 로봇이 협업하는 초자동화 시대가 올 것이라고 감히 생각해본다.

MS-SQL Cursor 사용하기

SQL 작업을 하다보면 조회된 쿼리 결과에 대해서 행 단위 작업이 필요할때가 있다. 이때, Cursor를 사용하면 효율적으로 처리 할 수 있다.

Cursor Command

  • DECLARE: Cursor에 관련된 선언을 하는 명령
  • OPEN: Cursor가 Query결과의 첫번째 Tuple을 포인트로 하도록 설정하는 명령
  • FETCH: Query 결과의 Tuple들 중 현재의 다음 Tuple로 커서를 이동시키는 명령
  • CLOSE: Query 수행을 모두 마친 후 Cursor를 닫기 위한 명령
  • DEALLOCATE: Close된 Cursor의 자원을 반환하는 명령

Cursor life cycle

Cursor Example

DECLARE @pColum_1 NVARCHAR(100), @pColum_2 INT, @pColum_3 BIT
DEClARE pCursor CURSOR
FOR
   select * from [Target Table]

OPEN pCursor

FETCH NEXT FROM pCursor INTO @pColum_1, @pColum_2, @pColum_3

WHILE(@@FETCH_STATUS <> -1)
   BEGIN
      update [Target Table] SET Colum = @Colum_1 + 1
      where Colum_2 = @pColum_2 and Colum_3 = @pColum_3
   END

CLOSE pCursor
DEALLOCATE pCursor

-유의사항-

Cursor를 사용하게 되면 내부적인 임시테이블을 사용하기 때문에 많이 사용하게 되면 DB성능에 영향을 미치게 된다. 되도록 사용량이 적은 시간때이거나 적은양의 데이터를 처리할 때 사용하는 것이 바람직 하다.

자연어 처리 기법과 활용

SF영화를 보면 인공지능이 사람의 말을 모두 알아듣고 이해하고 행동하는 것을 쉽게 볼 수 있다. 심지어 몇몇 영화에서는 보통 사람보다 더 인간적이고 철학적인 생각을 하는 인공지능 로봇들도 등장한다.

“정말 영화에서 나온 것처럼 인공지능이 사람의 언어와 감정을 모두 이해할 수 있을까? “

인간의 언어는 수천년의 역사를 가지고 다양하게 분화되고 발전해 왔다. 그리고 많은 부분 설명하기 힘든 감정이나 암묵적인 지식들로 구성되어 있기 때문에 정성적인 성질이 강하다. 그래서 정량적 데이터가 필요한 현재의 인공지능 학습 방법으로는 이러한 언어의 요소들을 이해시키기 어렵다.

그러면, SF영화에 나오는 것들은 허황된 이야기일 뿐인 것일까?

꼭 그렇지만은 않다. 우리 주변을 잘 살펴보자. 가장 가깝게 AI 스피커를 발견할 수 있을 것이다. 복잡한 대화는 아직 어렵지만 일상적이고 반복적인 간단한 말 들은 아주 잘 이해 한다.

예를들어 잠자리에 들기 전에 다음과 같은 대화를 할 수 있다.

나: (잠자리에 누우며)”OO야! 나 이제 잘래”

AI 스피커: “알람은 몇 시로 할까요?”

나: “내일 아침 7시에 깨워줘”

AI 스피커: “내일 아침 7시로 알람 설정 되었습니다.”

나: “방에 불 꺼줘”

AI 스피커 : (방에 불을 끄며)”수면에 좋은 음악을 틀어 드리겠습니다.”
(약 30분정도 잔잔한 음악 재생 후 종료됨.)

AI 스피커를 사용하기 전에는 이런 것들을 직접 손으로 해야 했다. 휴대폰에 알림을 맞추고, 잠들기 전에 들을 음악을 리스트에 담고 타이머를 맞춘다. 그러고 나서야 방에 불을 끄고 잠자리에 눕는다. 하지만 이젠 바로 잠자리 누워서 말로만 하면 된다.

어떻게 가능한 것일까?

이것을 이해 하기 위해서는 먼저 컴퓨터가 사람의 언어를 이해하기 위해서 시도 되었던 기계번역에 대해서 알아볼 필요가 있다.

초기에는 정해진 규칙에 의해서 번역을 해주는 ‘규칙기반(혹은 중성언어 기반)’으로 언어를 컴퓨터가 다루도록 하였다. 말 그대로 개발자가 정한 규칙에 의해서 원문을 타겟 언어로 번역해 주는 것인데, 앞서 언급한 말로 설명하기 힘든 감정적인 부분과 암묵적인 지식들을 개발자가 모두를 규칙으로 담기에는 한계가 있었다.

이러한 한계를 뛰어 넘기 위해서 나온 것이 ‘말뭉치 기반’으로 번역하는 방식이다. 말뭉치 기반은 크게 ‘예시 기반’‘통계 기반’ 2가지로 나누어 진다.

‘예시 기반’은 원문과 번역문을 저장해 두었다가 똑같은 원문 요청이 왔을때, 이를 활용하는 방식이다. 그리고 ‘통계 기반’은 원문과 번역문의 상관관계 빈도수를 통계화하고 이 수치를 활용하는 방식이다.

말뭉치 기반으로 번역을 하게 되면, 사용을 하면 할 수록 새로운 말뭉치 데이터가 누적 되기 때문에 사람의 개입 없이 컴퓨터가 스스로 언어의 정보를 익히고 처리해준다. 뿐만 아니라 번역 완성도도 점점 높아지게 된다.

“어떻게 말뭉치 기반이라는 것이 앞서 언급한 사람 언어의 정성적인 부분을 상관관계 형태로 통계화 하고 수치로 만든다는 것일까?”

컴퓨터에게 ‘사과’‘배’라는 두 단어를 보여준다면, 단지 유니코드 집합으로 해석 할 뿐 두 단어의 개념적 차이를 이해할 수는 없다.


그러면 유니코드가 아닌 컴퓨터가 이해 할 수 있는 수치를 사용해야 한다. 그것이 바로 벡터로 표현 하는 것이다. 벡터를 만드는 방식 중 하나인 One-Hot 인코딩 방식을 이용하여 간단히 설명해 보면, 다음과 같다.

문장에 의도를 파악하기 위해 필요한 요소가 [왕, 여왕, 남자, 여자]라면 ‘왕’를 표현하는 벡터는 [1, 0, 0, 0]이 되는 것이다. 그리고 ‘여왕’를 표현하는 벡터는 [0, 1, 0, 0]이 된다. 이런 식으로 벡터가 만들어지면 단어들이 실수 공간에 들어오기 때문에 각 단어들의 사이의 유사도를 측정 할 수 있게 된다. 그리고 문장속 단어의 의미 자체가 수치화 되어 있기 때문에 벡터 연산을 통해서 추론을 내릴 수도 있게 된다.

Male – Female

예를 들어 ‘왕(King)’에 대한 벡터에서 ‘남자(Male)’을 빼고 ‘여자(Female)’을 더하면, 벡터 연산을 통해서 ‘여왕(Queen)’이라는 결과를 얻을 수 있게 된다.

벡터 연산

이로써 컴퓨터가 사람의 언어적 정보를 단순히 저장하고 읽는 것만 하는 것이 아니라 의도를 파악할 수 있게 된 것이다.

이러한 처리 방식을 통해서 많은 관심을 받게 된 분야가 대표적으로 챗봇이다. 챗봇이 사람의 말의 의도를 파악할 수 있게 되면서 단순한 작업에 대해서 많은 도움을 줄 수 있게 되었다.

최근 가장 성공적인 사례인 ‘코로나-19’ 챗봇을 이야기 해보자.

그 동안의 민원 처리 방식은 모든 민원 내용을 사람이 일일이 읽어보고 취합한 뒤 공지를 통해서 한번에 알리는 방식이 일반적이었다. 이런 경우 민원을 넣고 처리가 되길 기다려야 한다. 질병관리본부에 들어오는 코로나-19에 대한 민원도 마찬가지 였지만 챗봇 도입을 통해서 이러한 문제점에 대해서 많은 어려움을 해소 할 수 있었다.

민원을 하는 사람이 “자가격리자는 어떻게 해야 할까?”라는 질문이 들어오면, 챗봇은 자연어 처리를 통해 사람의 의도를 파악하고 질병관리본부에서 제공하는 생활 수칙 가이드를 찾아서 제공을 해주는 것이다.

해결하고 싶거나 알고 싶은 정보들을 기다리지 않고 챗봇을 통해 바로 안내를 받게 해주면서 사람들 대부분의 민원을 지연없이 해결하게 된 것이다. 그로인해서 질병관리본부의 코로나-19 챗봇 등록자 수가 70만명을 넘어 섰다.

이 뿐만이 아니다. 사용자 층의 챗봇을 바라보는 시선이 전반적으로 달라졌다. 챗봇 초창기에 사람의 말을 제대로 이해하지 못하여서 좋은 사용자 경험을 전달하지 못했다. 그래서 좋은 기능으로 발전했음에도 불구하고 사람들로부터 외면 받고 있었다. 하지만 코로나-19 챗봇에 대한 좋은 사용자 경험으로 인해서 챗봇이 사용할 만하다는 인식이 생겨 났다.

국내 대표적인 소셜미디어 회사인 카카오와 네이버의 경우 코로나 사태 직전대비 챗봇 사용량이 각각 50%, 18%씩 증가 한 것으로 나타났다.

이는 컴퓨터가 사람의 말을 알아 들을 수 있게 되면서 사용자의 서비스 소비 패러다임이 변하고 있다는 것을 반영한다고 본다. 이러한 패러다임 변화에 대해서 기업들은 많은 관심을 가져야 할 것이다. 챗봇을 통해 기업 비즈니스를 고객들에게 어떻게 서비스 할 것인지 깊게 고민해 볼 필요가 있을 것 같다.

인공지능의 발전과 오픈소스 전략에 대하여

인공지능의 발전은 생각보다 오래 전부터 진행되었다. 1950년에 앨런 튜링이 “계산기계와 지성(Computing machinery and intelligence)”이라는 논문을 통해 처음으로 인공지능에 대한 개념의 토대를 마련했다. 이후, 1956년에 “다트머스 회의(Dartmouth Conference)”로 알려진 모임에서 처음으로 인공지능(AI: Artificial intelligence)이라는 용어를 사용하였고 튜링이 제안한 “생각하는 기계”를 구체화하기 위한 것들을 논의 하기 시작했다.

인공지능의 70년 역사

그리고 오늘날까지 눈에 띄지 않게 성장과 쇠퇴를 반복하다 2016년 인공지능 바둑 프로그램인 알파고가 등장하면서 그 동안 인공지능 기술 발전이 상당히 진행되었다는 것을 보여주었다. 사실, 이때만해도 알파고는 인공지능의 분야중 인지능력에 대한 가능성을 보여줬을뿐 직접적으로 무언가를 제시한 것은 아니었으며 알파고와 같은 인공지능 기술을 가지기 위해서 얼마나 많은 비용과 인력이 투자되었을지 파악하기도 어려운 것으로 느껴졌다.

하지만 알파고의 등장 이후 4년이 지난 지금은 어떤 산업군이든 인공지능 접목을 당연하게 생각하고 있다. 최근의 인공지능 기술들은 간단한 서비스 형태도 제공되어 어려운 기술적인 이해가 없어도 누구나 데이터만 있으면 이미 만들어진 인공지능 모델에 적용하여 학습시켜 볼 수 있으며 심지어 그 결과가 좋다면 제품에 바로 적용도 할 수 있다.

“도대체 최근 4년동안 무슨 일이 있었던 것일까?”

인공지능 기술 분야에서 글로벌 선도기업인 구글의 사례를 중심으로 살펴보자.

  • 2015년 구글의 인공지능 플랫폼 텐서플로우(Tensor Flow)를 무료로 공개 하였다.
  • 2016년 알파고로 유명한 구글 딥마인드에서 인공지능 기술 테스트 플랫폼인 딥마인드랩(DeepMind Lab)을 외부에 무료 공개 하였다.
  • 2017년 10월부터 고사양의 하드웨어(GPU, TPU)환경을 제공하는 인공지능 개발 환경 서비스 코랩(CoLab)을 무료로 사용할 수 있도록 하고 있다.

“인공지능 알고리즘을 구현하는 플랫폼 개발에는 대규모 자본이 투입되었으며, 고도의 기술력이 집약되어 있을 텐데 구글은 왜 무료로 외부에 공개했을까?”

인공지능 기술은 전통적인 ICT 산업부문을 넘어 전통산업을 포함하는 매우 광범위한 영역으로 응용된다. 그리고 응용대상 영역에서 얻어지는 데이터 및 사용자 피드백 등 케이스 의존적인 성격이 강하다. 이러한 이유로 인공지능의 기본 알고리즘은 금융, 의료, 제조, 교육 등 모든 분야에 응용가능하지만 각각의 응용대상 분야 자체에 대한 노하우가 없으면 수많은 알고리즘들은 실제로 구현 될 수 없다.

구글과 같은 글로벌 선도기업도 혼자만의 힘으로는 인공지능 기술의 보급 확산을 지금과 같은 수준으로 올릴 순 없었다. 오픈 소스 생태계를 활용하여 다양한 분야에서 인공지능 기술을 응용하는 주체들이 모두 협력했기 때문에 가능했던 것이다.

이러한 이유로, 구글뿐만 아니라 MS, IBM, Facebook, Open AI 등등 인공지능 기술을 이끄는 대부분의 글로벌 기업들이 오픈소스 생태계에 투자를 하고 있다. 그리고 이런 투자 덕분에 인공지능에 대한 보급과 화산이 그 전과 달리 매우 빠르게 진행 될 수 있었다.

“그러면 여기서 궁금한 것이 생긴다. 거대 글로벌 기업의 기술에 참여를 하여 발전을 도와주고 있는데, 정작 참여하고 있는 기업이나 개발자들 에게는 무엇이 남는 것일까?”

인공지능 연구 환경의 진입장벽이 매우 낮아졌다.

인공지능 기술은 쉽게 생각하면 주어진 데이터들을 다양한 차원으로 비교 탐색 및 분석하여 의미 있는 패턴을 찾아주는 것이다. 여기에는 여러 기술들이 요구되는데 크게 보면 2가지로 구분 할 수 있다. 분석을 할 데이터를 인공지능이 학습할 수 있도록 데이터를 탐색하고 정제하는 전처리 기술과 인공지능 모델을 실제로 연구하고 구현 할 플랫폼이다.

그 동안, 이런 인공지능 기술은 바로 상용화가 불확실한 경우가 많아서 자본이 부족한 기업은 투자가 어려웠고, 하더라도 리스크를 줄이기 위해 대학원이나 전문 연구기관 연구과제를 빌려와 진행하는 경우가 많았다. 이런 경우 굉장히 학문적으로 접근하기 때문에 현실적으로 매출에 좋은 영향을 주지 못 했다.

그러나 글로벌 기업이 엄청난 기술과 자본을 들여 만든 인공지능 연구/개발 플랫폼 기술을 모두 오픈소스로 공개 함으로써 인공지능 기술을 도입하려는 기업은 초기 기술 개발 비용에 대한 부담없이 오픈소스를 통해서 글로벌 기업의 기술력을 제공 받아 연구개발을 시작할 수 있게 된 것이다.

데이터 분석에 사용되는 알고리즘 기법들의 표준화이다.

오픈소스 프로젝트를 사용하는 참가 기업들이 많아지면 각 산업 분야의 다양한 정보와 최신 트랜드에 대한 문제점의 해결책을 공유하여 운영되기 때문에 유연하고 호환성이 높은 표준 모듈/라이브러리들이 개발 될 수 있다.

데이터 분석에 사용되는 알고리즘들은 크게 Classification(분류), Clustering(군집), Regression(회귀), Forecast(예측), Dimensional reduction(차원 축소) 등의 유형로 나누어진다. 그리고 각 유형에는 다양한 분석/학습 알고리즘 기법들로 세분화 된다. 이러한 것 때문에 인공지능 구현을 위해서는 알고리즘에 대한 많은 지식이 있어야 했고 최소 대학원 석사 이상이어야 인공지능 분야에서 일을 할 수 있었다.

Select Algorithm

하지만 최근 몇년사이에 오픈소스 생태계에 참여한 기업과 개발자들의 노력 덕분에 이러한 어려운 내용들이 정형화 되고 패키지/모듈로 간단히 제공되면서 이론에 대한 이해만 있으면 쉽게 가져다가 원하는 인공지능 모델을 구현해 낼 수 있게 되었다.

이러한 오픈소스 생태계의 이점들로 인해서 자원이 부족한 기업들도 잘 만들어진 글로벌 기업의 기술을 적은 비용으로 가져다가 사용할 수 있는 기회를 얻게 된 것이다.

국내 기업들은 오픈소스를 하면 기업의 기술이나 노하우가 노출된다고 생각하여 잘 시도 하지 않는다. 하지만 다르게 생각해보면 정말 잘 만든 기술도 많은 사람들로부터 활용되지 않으면 피드백이 적을 수 밖에 없고 빠르게 변화하는 IT 트랜드를 놓치기 쉽다. 많은 글로벌 IT 선도 기업들이 이러한 개념을 잘 이해하고 오픈소스 생태계를 전략적으로 잘 활용하고 있다. 국내 기업과 연구자들도 오픈소스 생태계를 적극 참여하여 미래 글로벌 IT 시장을 선도해 나가는 기회로 삼을 수 있기록 하는 것이 중요할 것 같다.