AutoAI 와 IBM Cloud Functions를 이용하여 트위터 예측 모델 만들기

요즘 환경에서는 많은 초점이 데이터로 옮겨졌습니다. 매일 같이 생성되고 소비되는 데이터가 늘어나며 대략 5 엑사 바이트가 추가됩니다. 전등을 켜거나 끄거나 일하러 가는 것과 같은 우리가 하는 모든 일은 데이터를 만들어 냅니다. 이러한 데이터는 패턴 예측 또는 추출을 위한 통찰력에 사용되는 정보를 만들어 낼 수 있습니다. 이러한 데이터에서 패턴, 통찰력 및 연관성을 발견하는 과정이 데이터 마이닝 또는 데이터 사이언스입니다. 이 튜토리얼에서는 데이터로 인사이트를 얻기 위한 예측 모델을 구현하는 방법을 보여줍니다. 여러분은 데이터 과학자를 위한 클라우드 기반 환경인 IBM® Watson™ Studio에서 AutoAI를 사용하여 어떻게 예측 모델을 만드는지에 대해 배우게 됩니다. 특별히, 트윗에 대해 최적의 트래픽을 유도 할 수 있는 Twitter 상호 작용을 예측하고 최적화하는 방법을 배우게 됩니다.

학습 목표

이 튜토리얼에서는 여러분이 데이터를 추출하는 방법, CSV 파일을 생성 후 IBM Cloud Object Storage에 업로드하는 방법, Watson Studio에서 IBM Cloud Object Storage로 데이터 연결을 만든는 방법, 그리고 데이터 정제 후 이를 AutoAI에서 예측 모델 빌드, 배치 및 평가하는 방법을 설명합니다.

이 튜토리얼를 완료하면 다음 사항에 대해 알게 됩니다:

  • IBM Cloud Functions로 Twitter에서 데이터를 추출하기
  • IBM Cloud Functions로 IBM Cloud Object Storage에 CSV 파일을 만들고 및 업로드하기
  • CSV 데이터를 사용하여 예측 모델 구축을 위해 Watson Studio 및 AutoAI 사용하기
  • 여러분의 Twitter 상호 작용 예측 및 최적화를 위해 Twitter 사용하기

사전 준비 사항

이 튜토리얼를 진행하려면 다음이 사항이 필요합니다:

예상 시간

이 튜토리얼을 완료하는데 약 60 분이 소요됩니다.

단계

샘플 데이터를 사용하거나 직접 가져 오기

여러분에게 가장 첫 번째로 필요한 것은 바로 분석할 트윗들입니다. 이 단계에서는 이러한 트윗을 얻는 방법에 대해 설명합니다. 그렇지만, 여러분들의 트윗들을 얻고 싶지 않다면 ufone_tweets.csv 샘플 데이터 세트를 사용 할 수 있습니다. 샘플 데이터 세트를 사용하는 경우 이 튜토리얼의 Twitter API 액세스IBM Cloud Functions 섹션은 건너 뛰십시오.

1

단계 : Twitter API 액세스 얻기

샘플 데이터를 사용한다면 2 단계로 건너 뜁니다.

tweepy를 사용하여 트윗들을 가져 오기 전에 먼저 Consumer API 키를 생성해야 합니다. Twitter Developer 계정으로 이동하여 오른쪽 상단의 여러분의 이름이 표시된 곳 위에 마우스를 올려서 앱 생성을 진행 합니다. 필요로 하는 정보를 입력하여 완료 하십시오.

Twitter Developer account

앱을 만든 후 Keys and tokens 탭을 선택합니다. 튜토리얼의 후반부에서 사용할 Consumer API keyConsumer API secret key 가 표시됩니다. 이 키들은 취소하고 다시 만들 수 있지만, 다른 키들과 마찬가지로 비밀로 유지해야 합니다. (이 튜토리얼에서는 API 토큰을 사용하지 않으므로 무시 할 수 있습니다.)

Keys and tokens

2

단계 : Cloud Object Storage 생성

  1. 여러분의 IBM Cloud 계정에 로그인 하십시오.
  2. 리소스 작성을 클릭하고, Object Storage를 검색합니다.

    IBM Cloud Object Storage

  3. 무료 라이트 플랜을 선택하고 원한다면 이름을 변경한 다음 Create를 클릭 합니다.

    Choosing plan

    이제 스토리지 아래의 리소스에서 생성된 Cloud Object Storage 인스턴스를 찾을 수 있습니다.

  4. 여러분의 인스턴스를 열어 왼쪽 창에서 버킷을 클릭한 다음, 버킷 작성을 클릭합니다 (여러분은 모든 유형의 버킷을 고를 수 있습니다). 버킷을 만든 후에는 그 버킷 이름을 기록해 두십시오.

    Naming your bucket

  5. 서비스 인증 정보로 이동하여, 방금 만든 서비스 인증 정보를 선택합니다. 화면에 아무것도 나타나지 않는다면 새 인증 정보 을 클릭하여 생성합니다. 화살표를 클릭하면 서비스 인증 정보 화면이 확장됩니다. api_key, iam_serviceid_crnresource_instance_id를 기록해 둡니다.

    Service credentials

  6. 엔드포인트로 이동하여 복원과 위치를 선택합니다. 다른 단계에서 프라이빗 url이 필요하므로 이를 기록해 두십시오.

    Endpoints

이제 여러분의 버킷이 준비 되었습니다. 다음 사항을 확인 하십시오:

  • 버킷 이름
  • API 키
  • 서비스 ID
  • 리소스 인스턴스 ID
  • 엔드포인트 URL

다시 말하지만, 여러분이 샘플 데이터를 사용하는 경우엔 버킷에 파일을 직접 업로드하고 3 단계를 건너 뛸 수 있습니다 ( 4 단계로 이동 ).

3

단계 : IBM Cloud Functions 생성

이 단계는 1 단계에서 시작한 경우에만 유효합니다.

IBM Cloud Functions는 단일 목적 함수인 액션를 작성하고, 특정 이벤트가 발생할 때 함수를 실행시키는 트리거와 함께 구성하는 IBM FaaS (Function-as-a-Service) 프로그래밍 플랫폼 입니다.

액션 만들기

일반적으로 IBM Cloud에서 직접 액션을 작성 하지만, 이번 경우에는 Twitter API에 액세스하기 위한 외부 Python 라이브러리인 tweepy를 사용하려고 합니다. 외부 라이브러리는 IBM Cloud Functions 런타임 환경에서 지원되지 않으므로 Python 코드를 작성하고 가상 로컬 환경과 함께 zip 파일로 패키징 한 다음 IBM Cloud에 푸시해야합니다.

Python 이 없는 경우 최신 버전을 다운로드하여 설치 합니다. 이후 virtualenv도 설치 합니다.

pip install virtualenv
  1. 가상 환경 구성에 사용될 디렉토리를 만듭니다. 이 튜토리얼에서는 이름이 twitterApp입니다.

     cd desktop; mkdir twitterApp; cd twitterApp
    
  2. twitterApp 디렉토리에서 virtualenv라는 이름의 가상 환경을 생성합니다. 가상 환경의 이름은 반드시 virtualenv이어야 합니다.

     virtualenv virtualenv
    
  3. 이 디렉토리(여기서는 twitterApp)에서 여러분만의 virtualenv 가상 환경을 활성화 합니다 .

     source virtualenv/bin/activate
    
  4. tweepy 모듈을 설치합니다.

      pip install tweepy
    
  5. virtualenv를 중지합니다.

     deactivate
    
  6. 아래 코드를 복사하여 twitterApp 디렉토리에 main.py라는 이름의 파일을 만들어 저장하고, 1 단계 (Customer 키)와 2 단계 (Cloud Object Storage 인증 정보)에서 해당 인증 정보 추가합니다. 추가적으로, 여러분이 분석하려는 트위터 handle을 변경할 수 있습니다. (이 튜토리얼에서는 Charlize Theron의 트위터 Handle을 사용하여 분석합니다.) 이 코드는 Twitter에서 데이터를 가져온 다음 이 데이터가 포함된 CSV 파일을 생성하고 튜토리얼 시작할 때 생성한 객체 스토리지 서비스에 업로드합니다. 이 함수가 실행되고 나면 트윗 정보가 포함된 CSV 파일이 Cloud Object Storage의 버킷에 업로드 됩니다.

     import tweepy
     import sys, json
     import pandas as pd
     import csv
     import os
     import types
     from botocore.client import Config
     import ibm_boto3
    
     #Twitter API credentials
     consumer_key = <"YOUR_CONSUMER_API_KEY">
     consumer_secret = <"YOUR_CONSUMER_API_SECRET_KEY">
     screen_name = "@CharlizeAfrica"  #you can put your twitter username, here we are using Charlize Theron twitter profile to analyze.
    
     def main(dict):
         tweets = get_all_tweets()
         createFile(tweets)
    
         return {"message": 'success' }
    
     def get_all_tweets():
         # initialize tweepy
         auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)
         api = tweepy.API(auth)
    
         alltweets = []
         for status in tweepy.Cursor(api.user_timeline, screen_name = screen_name).items(3200):
             alltweets.append(status)
    
         return alltweets
    
     def createFile(tweets):
         outtweets=[]
         for tweet in tweets:
             outtweets.append([tweet.created_at.hour,
                               tweet.text, tweet.retweet_count,
                               tweet.favorite_count])
    
         client = ibm_boto3.client(service_name='s3',
         ibm_api_key_id=<"COS_API_KEY">,
         ibm_service_instance_id= <"COS_SERVICE_ID">,
    
         config=Config(signature_version='oauth'),
         endpoint_url= "https://" + <"COS_ENDPOINT_URL">)
    
         cols=['hour','text','retweets','favorites']
         table=pd.DataFrame(columns= cols)
    
         for i in outtweets:
             table=table.append({'hour':i[0], 'text':i[1], 'retweets': i[2], 'favorites': i[3]}, ignore_index=True)
         table.to_csv('tweets_data.csv', index=False)
    
         try:
             res=client.upload_file(Filename="tweets_data.csv", Bucket=<'BUCKET_NAME'>,Key='tweets.csv')
         except Exception as e:
             print(Exception, e)
         else:
             print('File Uploaded')
    
  7. twitterApp 디렉토리에서 의virtualenv 폴더와 main.py 파일을 zip으로 압축한 파일을 생상합니다. 이 파일들은 zip 파일의 최상위 수준에 있어야 합니다.

     zip -r twitterApp.zip virtualenv main.py
    
  8. IBM Cloud 계정에 로그인하고 IBM Cloud에 푸시 하십시오. 이 때, 여러분의 조직과 공간이 사전에 지정되어 있어야 합니다. 이와 관련한 상세 내용은 관련 절차 페이지에서 알아 볼 수 있습니다.

     ibmcloud login
    
  9. 여러분이 방금 생성한 .zip 폴더(파일에 마우스 우클릭하고 Mac은 정보 가져오기, Windows™는 속성 을 선택하여 경로 획득)를 이용하여 코드에서 main 함수가 있는 진입점과 --kind 플래그로 런타임을 지정하여 twitterAction라는 액션을 생성합니다.

     ibmcloud fn action create twitterAction </path/to/file/>twitterApp.zip --kind python:3.7 --main main
    
  10. IBM Cloud로 돌아가서 창 왼쪽에있는 Cloud Functions 를 클릭 하십시오.

    Cloud functions

  11. 액션을 클릭하여 올바른 네임스페이스가 선택 되었는지 확인합니다. 앞서 만들어진 액션이 표시되면 이를 클릭하고, 호출을 클릭하여 이를 실행합니다.

    Creating an meta_description

    다음 명령을 사용하여 터미널에서 직접 실행할 수도 있습니다.

     ibmcloud fn action invoke twitterAction --result
    

튜토리얼 처음 부분에서 생성한 Cloud Object Storage 서비스의 버킷으로 이동하면 tweets.csv 업로드 된 파일이 표시 됩니다. 이 파일은 IBM Cloud Functions에서 추출된 트윗이 들어 있습니다.

트리거 만들기

이제 여러분의 액션을 호출하는 트리거를 생성합니다.

  1. 왼쪽 창에서 트리거를 선택하고 트리거를 클릭합니다.

    Selecting a Trigger

  2. 트리거 유형으로 Periodic을 선택 하십시오. 이는 시간이 이벤트임을 의미하며, 함수는 특정한 시간에 호출되게 됩니다.

    Choosing trigger type

  3. 트리거 이름을 지정하고 타이머를 정의한 다음 작성을 클릭 합니다. 이 예제에서는 일요일에 타이머가 설정됩니다. 매주 일요일 오전 4시(GMT+4) 마다 트리거가 실행되면 Twitter 데이터를 가져오고 새 트윗으로 새 CSV 파일을 만드는 액션을 호출합니다.

    Naming the trigger

  4. 추가 를 클릭하여 트리거를 액션에 연결 하십시오.

    Connecting the trigger

  5. 기존 항목에서 선택 탭에서 액션을 선택하고 추가를 클릭 하십시오. 이제 여러분의 액션이 트리거에 연결되고 여러분이 지정한 시간을 기준으로 실행됩니다.

    Adding the trigger time

4

단계 : Watson Studio 서비스 생성

튜토리얼 시작 부분에서 Cloud Object Storage 서비스를 생성하는 방법과 비슷하게, Watson Studio 서비스 생성도 동일한 절차를 따르게 됩니다.

  1. Watson Studio를 검색하고 Lite 플랜을 선택하여 이를 생성 하십시오. 리소스 요약 (IBM Cloud 계정의 기본 대시 보드)의 서비스 아래 인스턴스화 되어있는 것을 볼 수 있습니다. 이를 클릭 한 다음 Get Started 를 클릭 합니다. 그러면 Watson Studio 플랫폼이 시작됩니다.

    Launching Watson Studio

  2. Create Project를 클릭 한 다음 Create an empty project를 클릭 합니다.

    Creating a project

  3. 프로젝트의 이름을 지정하고 설명을 제공합니다. 이 때 앞서 생성한 Cloud Object Storage 서비스를 선택해야 합니다.

    Naming the project

5

단계 : Cloud Object Storage에 대한 연결 생성

  1. Add to project를 클릭합니다. 여기에 Watson Studio에서 사용할 수 있는 다양한 Asset이 표시 됩니다. 여러분은 Cloud Object Storage 서비스로의 연결을 생성해서 tweets.csv 파일에 액세스 하게 됩니다. 이 파일에 접근한 다음에 그 파일 내부 데이터에 접근 할 수 있습니다. 여러분은 이 데이터를 이용하여 AutoAI로 여러분만의 기계 학습 모델을 생성하게 됩니다.

    Adding to projects

  2. Cloud Object Storage 서비스에 대한 연결 생성을 시작하기 위해 Connection 을 클릭 하십시오.

    Creating a connection

  3. Cloud Object Storage를 클릭합니다.

    Connecting to cloud object storage

  4. 연결에 대한 이름을 지정하고 2 단계 에서 얻은 인증 정보 (Cloud Object Storage 인증 정보)로 정보를 완성합니다. API_KEY, Resource Instance ID 그리고 엔드포인트 정보인 Login URL 정도 만을 추가합니다. 다른 필드는 비워 둘 수 있습니다.

    Naming the connection

  5. Add to project를 클릭하고 connected data를 클릭합니다. 이전 단계에서 만들어진 연결 정보를 소스로 선택한 다음, 여러분의 버킷을 선택하고 tweets.csv 파일을 선택 합니다. 여러분의 asset에 이름을 붙이고 Create를 클릭 합니다.

    Adding connected data

6

단계 : 데이터 정제하기

데이터는 이미 준비되어 있지만 hourfavorites 행을 반드시 integer로 변환해야 합니다. hour 먼저 시작 하십시오. 추가적으로, retweets 열은 예측에 사용되지 않으므로 삭제 하십시오.

Refining the data

  1. 점 3개 아이콘을 클릭하고 Convert column 을 고른 다음 Integer 를 선택합니다. favorites과 retweets에 대해 같은 과정을 반복합니다.

    Choosing integer

  2. 완료가 되었다면 Save and create a job을 클릭 합니다.

    Saving the job

  3. job에 대한 이름을 지정하고 Create and Run을 클릭 합니다.

    Naming the job

이 job은 여러분이 이미 가지고 있는 데이터를 기반으로 새로운 데이터 세트를 만들어 냅니다만, 세 개의 row를 integer 로 변환되어야 하는 정제가 동반되어야 합니다. 보시다시피 이 job의 결과물은 Tweets_shaped.csv라는 이름의 파일이 됩니다. job의 상태가 Completed로 표시될 때 까지 기다리십시오 .

Creating the file

이제 여러분은 다음 이미지와 같이 세 개의 asset을 볼 수 있게 됩니다. 이제 여러분이 AutoAI로 예측 모델을 생성하는데 사용할 주요 파일이 이 Tweets_shaped.csv 파일이 됩니다.

Three assets

7

단계 : AutoAI experiment 생성하기

  1. Add to projects를 클릭하고 AutoAI experiment을 선택합니다.

    Selecting AutoAI experiment

  2. 프로젝트 이름을 부여하고 머신 러닝 인스턴스를 선택합니다. 이는 최종적으로 여러분이 모델을 배포 하는데 필요한 것입니다. 계정이 없다면 Watson Studio가 여러분이 바로 생성할 수 있도록 요청하며, 이후 정상적으로 진행 할 수 있게 됩니다.

    Choosing a machine learning instance

  3. 데이터 정제 과정에서 생성된 파일인 Tweets_shaped.csv 파일을 선택하여 이를 추가하십시오.

    Adding the file

  4. 여러분은 언제 트윗을 공유 할 때 가장 많은 상호 작용을 얻을 수 있는지를 예측하고 싶은 것이므로, Prediction column으로 favorites 를 선택 하십시오. 예측 유형이 Regression(회귀)로 나오는데 이는 여러분이 연속적인 값을 예측하고 싶어하기 때문이며, 최적화된 측정 항목이 RMSE (Root Mean Squared Error)이기 때문입니다. 여러분은 Experiment Settings 을 클릭하여 experiment를 변경하고 사용자 맞춤으로 설정 할 수 있습니다.

    Predicting best time

  5. Experiment Settings에서 Prediction으로 이동합니다. 여기에서 experiment에 사용할 수 있는 모든 알고리즘을 볼 수 있고, 사용할 알고리즘 갯수를 변경 할 수 있습니다. 예를 들어 3을 선택 할 수 있는데, 이는 experiment에서 상위 세 개의 알고리즘을 사용하는 것을 뜻합니다. AutoAI는 모든 알고리즘에 대해 네 개의 파이프 라인을 생성합니다. 즉, 첫 번째 파이프 라인은 enhancement가 추가되지 않은 평범한 파이프 라인이고, 두 번째 파이프 라인은 HPO (하이퍼 파라미터 최적화, Hyperparameter Optimization)가 추가되어 있고, 세 번째 파이프 라인은 HPO 및 피쳐 엔지니어링(Feature Engineering)이 추가되어 있으며, 마지막 파이프 라인은 HPO, 피쳐 엔지니어링 그리고 또 다른 HPO가 추가된 파이프 라인입니다. 세 가지 알고리즘을 사용하고 있기 때문에, 전체적으로 12개의 파이프 라인(3×4=12)을 갖게 되며, AutoAI는 최적의 모델을 찾기 위해 12가지 후보를 빌드하고 결과를 생성합니다.

    Experiment settings

8

단계 : 모델 빌드 및 평가

AutoAI에서는 여러분의 사례에 가장 적합한 12개의 최적 모델을 만들고, 그 결과를 이해하고 및 시각화하는 다양한 방법이 제공합니다. 다음 이미지는 Relationship Map 으로 AutoAI가 파이프 라인을 빌드하고 생성하는 방법을 나타냅니다. 모든 색상은 알고리즘 유형을 나타내며, 각각의 알고리즘은 이전 단계에서 논의되었던 네 개의 파이프 라인을 가지고 있습니다.

Pipelines

Swap view을 클릭하면 Progress Map을 확인 할 수 있습니다. 이는 AutoAI가 여러분의 파이프 라인을 순차적으로 생성하는지를 시각화하는 또 다른 방법입니다.

Swipe view

여러분은 Pipeline leaderboard 에서 어떤 것이 가장 좋은 모델인지 확인 할 수 있습니다. 이 경우에서는 Pipeline 11이 두 가지 enhancement (첫 번째 HPO 및 피쳐 엔지니어링)과 Extra Trees Regressor를 사용하는 최적의 모델입니다.

Pipeline leaderboard

AutoAI는 이러한 모든 파이프 라인들을 비교해서 보여줍니다. Pipeline comparison 를 클릭하면 선택한 후보를 비교한 Metric Chart가 표시됩니다.

Pipeline comparison

Pipeline 11이 가장 좋은 모델이므로, 이를 클릭해서 관련 정보를 더 얻을 수 있습니다. 예를 들어 Feature Importance 를 확인하면 예측 모델에 대한 의사 결정의 주요 요인을 확인 할 수 있습니다. 이 예제에서 NewFeature_0 은 예측에 있어 가장 중요한 요소입니다. NewFeature_0NewFeature_3 처럼 새로 생성된 피쳐 입니다. 이는 모델을 향상 시키기 위해 피쳐 엔지니어링으로 생성된 서로 다른 feature들의 조합 (예를 들어, text 와 favorites의 조합)입니다.

Looking at the model

9

단계 : 모델 저장 및 배포

이제, 모델을 저장하고 배포하여 이를 이용해 보도록 합니다.

  1. Save as를 클릭 하고 Model을 선택합니다 . 이렇게 모델이 저장되고 나면, 이제 여러분은 Models 섹션 아래 Assets 에 있는 프로젝트의 대시 보드에서 이 모델을 접근 할 수 있게 됩니다.

    Saving the model

  2. 새로 생성된 이 모델을 클릭하고 Deployments 탭을 선택한 다음 Add Deployment를 클릭하여 배포를 만듭니다 (이름을 반드시 지정해야 합니다). 이 웹 배포는 REST 호출을 이용하여 접근 할 수 있습니다.

    Deploying the model

  3. Deployments 탭에서 배포의 상태가 Ready 가 될 때까지 기다린 다음, 배포의 이름을 클릭합니다.

    Clicking the deployment

10

단계 : 모델 평가

이제 모델을 사용할 준비가 되었습니다.

  1. Test 탭을 선택하고 필드에 데이터를 입력합니다. 원하는 경우 JSON 형식으로 데이터를 넣을 수 있습니다 (이 방법은 필드가 많은 경우라면 쉽겠지만 여기서는 필드가 두 개 뿐입니다).

  2. Predict를 클릭하면 values에 결과가 표시됩니다. 이 예제에서는 930이라는 값을 얻었습니다. 이는 Charlize (여기서는 Charlize Theron의 데이터를 사용하고 있습니다)가 오후 4시(이 예제에서는 hour 가 16)에 트윗을 공유하면 대략 930 개의 favorites를 얻을 수 있게 되는 것을 의미합니다. 여러분 자신의 계정에 대해 예측하고 싶다면 IBM Cloud Function에 여러분이 가진 사용자 이름을 넣으면 됩니다.

여러분의 애플리케이션에서 이 모델을 구현하고 싶다면 Implementation 탭을 클릭 하십시오. 여기에는 endpoint URL과 여러분 애플리케이션에 사용 할 수 있는 다양한 프로그래밍 언어(cURL, Java, JavaScript, Python 및 Scala)별 소스 코드가 있습니다.

Implementation

요약

여러분은 이 튜토리얼을 통해 Twitter에서 데이터를 추출하는 법, 그 데이터가 포함된 CSV 파일을 작성하는 법, IBM Cloud Functions를 사용하여 IBM Cloud Object Storage에 업로드하는 방법을 배웠습니다. 그러고 나서 이 데이터로 Watson Studio 및 AutoAI를 이용한 트윗 시점 최적화 및 사용자의 청중 수 증가용 예측 모델 생성 방법을 배웠습니다.