| Developer: BI
Oracle Data Mining API의 활용
저자 - Agust Egilsson
사용자들이 오라클의 분석 API에 직접 액세스하고 안전하게 활용할 수 있게 하기 위한 방법을 소개합니다.
게시일: 2006년 8월
오라클은 새로운 API를 이용하는 포인트-앤-클릭 툴 또는 빌더 툴이 출시되기 훨씬 전에 PL/SQL, Java API를 미리 공개하는 것을 기본적인 정책으로 하고 있습니다. 오라클의 이러한 정책 덕분에, 개발자들이 새로 출시된 기능을 곧바로 애플리케이션에 구현하고 기업이 즉각적인 혜택을 확인하는 것이 가능합니다.
하지만 새로 공개된 API를 이용하는 전문화된 도구를 구현하기 위해서는 매우 많은 투자가 필요합니다. 이러한 문제 때문에 API가 공개된 이후, 이 API를 이용하는 엔드 유저 툴이 출시되기까지 적게는 몇 개월, 길게는 1-2년이 걸리기도 합니다. 새로운 툴이 출시되기 전까지, 기업은 내부적으로 툴을 개발하거나 리포트 생성기와 스프레드시트에 API 호출을 임베드하는 식으로 임시적인 솔루션을 구현하기도 합니다.
한 예로, 스크립트에 API를 래핑(wrapping)하고, 커스텀 버튼과 메뉴를 이용하여 사용자가 스프레드시트를 통해 스크립트에 접근하도록 하는 방법이 자주 사용됩니다. 하지만 현재 출시된 스프레드시트 제품들이 셀 값으로 텍스트와 숫자만을 허용하기 때문에, 새로운 기능을 효과적으로 활용하기 어렵다는 문제가 있습니다.
본 문서에서는 분석 및 기타 기능에 관련한 API를 스프레드시트 플랫폼에 삽입하고, 엔드 유저가 새로운 코드에 쉽게 접근할 수 있게 하는 방법을 설명하고 있습니다. 본 문서에서는 Oracle Data Mining (PL/SQL) API를 Java API로 리패키징하고, J Cells라는 이름의 스프레드시트로부터 액세스하는 시나리오를 사용하고 있습니다. J Cells는 처음부터 끝까지 Oracle JDeveloper를 이용하여 작성되었습니다. J Cells는 텍스트, 숫자 이외에도 Java 오브젝트를 셀 값으로 허용하며, 셀 내부에서 Java API에 직접 액세스하는 것이 가능합니다.
스프레드시트 플랫폼
본 문서에서 구현되는 J Cells 스프레드시트 인터페이스는 셀에서 Java 오브젝트를 생성하고 프리미티브 Java 타입을 사용하는 기능을 지원합니다. 각각의 셀은 다른 셀의 변수로 사용될 수 있으며, 사용자는 셀에 직접 Java 코드를 작성하거나 또는 다른 포맷을 사용할 수 있습니다. 스프레드시트 인터페이스의 셀 내에서 숫자 및 텍스트 이외의 오브젝트를 사용하는 기능은 자동으로 수행됩니다. J Cells는 셀에 입력된 각 오브젝트의 표시값(indication value)를 계산하고, 이 표시값을 통해 디스플레이되는 오브젝트의 성격을 사용자가 확인할 수 있게 합니다. 또 사용자의 요청이 있는 경우(예를 들어 사용자가 셀을 더블 클릭한 경우) 오브젝트를 다른 포맷으로 전환하여 표시하는 기능이 제공됩니다. 자동화된 기능을 제공하는 스프레드시트라도 공식을 정의하는 작업은 사용자에게 복잡하게 느껴질 수 있습니다. J Cells는 생성된 오브젝트에 마법사가 연결되어 있는 경우 이를 자동으로 인식합니다. 마법사는 일반적으로 특정 오브젝트 타입에 연관된 그래픽 코드 생성기의 형태로 구현됩니다. J Cells에서 마법사를 이용하는 방법에 대해서는 뒷부분에서 설명합니다.
그림 1은 J Cells 스프레드시트의 인터페이스를 보여주고 있습니다.

그림 1: J Cells 스프레드시트 인터페이스
Data Mining API
오라클은 데이터베이스의 데이터 마이닝 기능에 접근하기 위한 두 가지 API를 제공합니다. 그 하나가 DBMS_DATA_MINING 패키지에 포함된 PL/SQL API이며, 또 다른 하나가 Oracle Data Mining Java API라 불리는 Java API입니다. J Cells는 Java API에 최적화된 형태로 구현되어 있으므로, PL/SQL API의 경우 Java에서 직접 액세스가 가능한 형태로 패키징 되어야 합니다. Oracle Data Mining의 가장 기본적인 두 가지 개념으로 "세팅(setting)"과 "모델(model)"이 있습니다. "세팅"은 setting_name과 setting_value의 두 가지 컬럼을 갖는 setting 테이블을 중심으로 구현됩니다. 여기서 setting_name은 마이닝 알고리즘에 의해 사용되는 속성의 이름을, setting_value는 해당 속성에 연계된 값을 의미합니다.
DBMS_DATA_MINING 패키지는 CREATE_MODEL, APPLY와 같은 프로시저를 포함하고 있습니다. CREATE_MODEL 프로시저는 프로시저의 매개변수로 제공되는 setting 테이블 값을 기준으로, 주어진 마이닝 함수와 데이터셋을 위한 마이닝 모델을 생성합니다. 이 프로시저는 사용이 매우 쉽고 간단합니다. 사용자는 생성할 모델의 이름, 사용할 마이닝 함수, 사용할 데이터가 저장된 테이블, 모델링할 컬럼, 그리고 settings 테이블을 입력으로 제공합니다. 이 접근법은 여러 가지 다양한 알고리즘을 거의 동일한 방법으로 활용할 수 있다는 장점이 있습니다. 각 알고리즘의 세부적인 튜닝 방법은 settings 테이블에 설정됩니다. 하지만 적절한 세팅 계수가 알고리즘에 의해 자체적으로 결정되는 경우가 대부분입니다. settings 테이블에 입력되는 정보의 복잡도는 사용되는 알고리즘과 사용자의 스킬에 따라 달라집니다. 전문적인 사용자들은 모든 계수(coefficient)들을 수동으로 설정할 가능성이 높은 반면, 대부분의 사용자들은 시스템이 자동적으로 설정 작업을 수행하도록 하는 방법을 선택할 것입니다. 오라클은 settings 키에 사용될 상수(constant) 목록을 제공합니다. 값은 네임드 상수(named constant) 또는 숫자 인터벌(numeric interval)로 정의됩니다.
표 1: algo_name (알고리즘의 이름) settings 키를 위한 값
| 값 |
알고리즘 설명 |
|
algo_adaptive_bayes_network
|
Adaptive Bayes network algorithm (classification)
|
|
algo_ai_mdl
|
Minimum description length algorithm (attribute importance)
|
|
algo_apriori_association_rules
|
Apriori algorithm (association)
|
|
algo_decision_tree
|
Decision tree algorithm (classification)
|
|
algo_kmeans
|
k-means algorithm (clustering)
|
|
algo_naive_bayes
|
Naive Bayes algorithm (classification)
|
|
algo_nonnegative_matrix_factor
|
Non-negative matrix factorization algorithm (feature selection)
|
|
algo_o_cluster
|
O-Cluster algorithm (clustering)
|
|
algo_support_vector_machines
|
Support vector machine algorithm (classification or regression)
|
오라클이 알고리즘 이름 (algo_name) 키에 대해 정의한 상수 값이 위와 같습니다. 각각의 상수 값에 대해 서로 다른 키/값의 조합을 사용할 수 있습니다. 사용자는 이 키들을 트리 구조로 매핑하는 마법사 함수를 이용하여, settings 트리를 변경하는 방법으로 settings 테이블을 설정할 수 있습니다(그림 2 참고).
오라클 데이터베이스에 마이닝 모델을 생성한 후, 생성된 모델을 DBMS_DATA_MINING.APPLY 프로시저를 이용하여 새로운 데이터셋에 적용할 수 있습니다. 이 작업 역시 매우 간단하게 수행이 가능합니다. 사용자는 마이닝 모델의 이름, 새로운 데이터셋을 저장한 테이블의 이름, 새로운 데이터셋의 로우가 저장된 컬럼, 결과 데이터셋의 이름만을 입력으로 제시하면 됩니다. OracleMiningModel Java 클래스(아래 참조)는 prediction, score, apply 메소드가 호출될 때마다 APPLY 프로시저를 활용합니다. 그 밖에도 DBMS_DATA_MINING 패키지는 각각의 모델에 대한 상세 정보를 결과 셋 또는 XML 포맷으로 반환하는 여러 가지 함수를 포함하고 있습니다. 이 함수는 OracleMiningModel 클래스의 인스턴스를 이용하여 접근할 수도 있습니다.
본 문서에서는 PL/SQL의 세팅(settings) 컨셉을 Java로 구현하기 위해, 다양한 시그니처를 포함하는 유연한 컨스트럭트(construct)를 갖는 OracleModelSettings Java 클래스를 생성합니다.
public OracleModelSettings ( String modelSettingsName,
Connection databaseConnection,
String[] keyToValueStringMap)
throws SQLException
keyToValueStringMap은 “ -> ”의 형식을 갖는 문자열 어레이입니다. 이 어레이는 settings 테이블의 로우를 참조하며, 오라클 데이터베이스의 settings 테이블을 관리하기 위한 클래스가 사용됩니다.
마찬가지로, PL/SQL의 모델(model) 컨셉을 Java로 구현하기 위해, 다양한 시그니처를 포함하는 유연한 컨스트럭트(construct)를 갖는 OracleMiningModel Java 클래스를 생성합니다.
public OracleMiningModel ( String modelName,
OracleModelSettings oms,
String[] keyToValueMappings,
boolean recreate)
throws SQLException
여기서 keyToValueMappings 어레이를 이용하여 사용되는 알고리즘, 데이터 마이닝 모델 생성에 필요한 속성 이름 등을 확인하는 작업이 수행됩니다. 이 클래스는 기본적으로 데이터 마이닝 모델의 생성 및 관리를 책임집니다. 이와 별도로, OracleMiningModel 클래스는 새로운 데이터셋에 모델을 적용하기 위한 메소드들을 정의하고 있습니다. OracleMiningModel 클래스에 포함된 메소드의 예가 아래와 같습니다.
public OracleResultSet infoAprioriAssociationRules(int topn)
public OracleResultSet infoAprioriFrequentItemsets(int topn)
public OracleResultSet infoAdaptiveBayesNetwork()
public OracleResultSet infoAIMinimumDescLength()
public OracleResultSet infoKMeans()
public OracleResultSet infoNaiveBayes()
public OracleResultSet infoNonnegativeMatrixFactorization()
public OracleResultSet infoOCluster()
public OracleResultSet infoSupportVectorMachines()
public XMLType infoDecisionTree()
public Object getPrediction(String[] signature, double[] doubleVal)
public HashMap score(String[] signature, double[] doubleVal)
public OracleResultSet apply( String dataTable,
String caseID,
String resultTable,
String schema,
boolean overwrite)
모든 메소드는 SQL 익셉션(exception)을 발생시킬 수 있습니다. 이 두 가지 클래스를 이용하여 데이터 마이닝 기능을 관리할 수 있도록 구현했다면, 이제 스프레드시트 플랫폼을 호출하여 오라클 데이터베이스에 저장된 데이터셋의 모델링을 위해 데이터 마이닝 알고리즘을 적용할 수 있습니다.
데이터 마이닝 예제
이제 오라클 데이터베이스에 액세스하여 ODM(Oracle Data Mining) 회귀(regression) 모델을 생성, 실행하는 간단한 데이터 마이닝 애플리케이션을 살펴보기로 하겠습니다. 이 회귀 모델은 혈압, 신장, 체중 등의 입력을 기준으로 심장 박동수를 예측하고 있습니다. 사용자는 J Cells를 이용하여 Java API에 직접 액세스함으로써 오브젝트를 인스턴스화(instantiate)하고 오브젝트에 대해 메소드를 호출할 수 있습니다. 이를 위해 먼저 오라클 데이터베이스에 접근해야 합니다. DataSource 오브젝트의 인스턴스화를 위해 아래 공식을 스프레드시트의 b3 셀에 입력합니다:
() = ~ OracleDataSource("agust","agust","dbVaio","vaioFS");
여기서 물결(~) 기호는 J Cells가 기호 오른쪽의 텍스트를 “new cell.OracleDataSource( "agust", "agust", "dbVaio", "vaioFS");” 컨스트럭터로 변환하여 "agust" 사용자로 "vaioFS" 서버의 "dbVaio" 데이터베이스에 액세스할 수 있음을 의미합니다.
이제 데이터베이스 연결을 확보하고 데이터베이스의 소스 데이터를 검증하기 위해, DataSource 오브젝트에 대해 적절한 메소드를 호출할 수 있습니다. 예를 들어, 아래와 같이 b4, b5 셀에 공식을 입력할 수 있습니다:
(*) = b3.getConnection();
(*) = b3.query("select * from pulse_clinical");
첫 번째 구문은 b4 셀에 java.sql.Connection 오브젝트를 반환하고, 두 번째 구문은 b5 셀에 java.sql.ResultSet 오브젝트를 반환합니다. 셀(b5)을 더블 클릭하면 결과 테이블 프레임의 형태로 테이블이 열리고, 이 프레임을 통해 결과 셋을 검증할 수 있습니다.
지금까지 스프레드시트에 몇 가지 데이터 오브젝트를 생성해 보았습니다. 이제 데이터 마이닝 API를 호출하여 settings 오브젝트를 정의하고 간단한 데이터 마이닝 모델을 생성해 보겠습니다. 먼저 b6 셀에 아래 구문을 입력하여 settings 오브젝트를 생성합니다:
(*) = new cell.odm.OracleModelSettings("xyz_settings", b4,
new String[]{
"algo_name -> algo_support_vector_machines",
"svms_kernel_function -> svms_linear"} );
이 방법은 사용자의 입장에서 전혀 직관적이지 않다는 문제가 있습니다. 따라서 이 공식을 자동으로 생성하기 위한 마법사를 J Cells에 등록하는 것이 좋을 것입니다. 스프레드시트에서 복잡한 공식을 생성하는 과정을 단순화하는 기능을 제공하듯, 복잡한 오브젝트를 생성할 때에도 마법사와 같은 가이드 툴이 제공되는 것이 당연합니다.
그림 2는 적용된 마법사를 보여주고 있습니다.

그림 2: 전형적인 마법사 인터페이스의 예
마찬가지 방법으로, 마법사 또는 공식을 이용하여 데이터 모델을 생성합니다. 결과로 생성된 모델은 b7 셀에 인스턴스화됩니다.
(*)= new cell.odm.OracleMiningModel("xyz_model", b6,
new String[]{
"data_table_name -> pulse_clinical",
"mining_function -> regression",
"target_column_name -> pulse",
"case_id_column_name -> subject"},
false );
이 공식을 이용하여 데이터 마이닝 모델을 인스턴스화하면, 그 결과로 오라클 데이터베이스에 표준 Oracle Data Mining 모델이 생성됩니다. b7 셀을 더블 클릭하여 이 모델을 검증할 수 있습니다. 결과로 출력되는 값이 그림 3과 같습니다. 
그림 3: b7 셀의 모델 검증
오라클 데이터베이스의 데이터셋에 모델을 적용하기 위해 앞에서 설명한 OracleMiningModel 메소드가 사용됩니다. 모델에 대한 인터액티브 스코어링(scoring) 작업을 수행하기 위해, 사용자는 혈압, 신장, 체중을 입력한 후 심장 박동률을 예측할 수 있습니다. 이 과정에서 model 오브젝트에 정의된 getPrediction Java API 메소드가 사용됩니다. 입력 값을 e4, e5, e6, e7 셀에 순서대로(b8 셀의 시그니처 어레이에 명시된 순서 기준) 입력한 뒤, 아래 공식을 입력하면 스코어링이 완료됩니다:
(*) = b7.getPrediction(b8,new double[]{e4,e5,e6,e7});
이 공식 역시 Java API에 직접 액세스하여 스코어링 결과를 가져온 후 그림 4와 같이 e9 셀에 그 결과를 출력합니다

그림 4: 모델을 입력 값에 적용
스프레드시트의 장점
엔드 유저의 입장에서 스프레드시트의 인기는 양날의 검과도 같습니다. 개발자들은 스프레드시트를 골치 아픈 환경으로 생각하며 보다 유연하고 강력한 시스템을 선호합니다. 하지만 일반 사용자들의 입장에서 볼 때 스프레드시트 시스템에는 분명한 이점이 존재합니다. 그래픽 사용자 인터페이스를 별도로 구현할 필요가 없고, 각각의 공식(코드)을 개별적으로 구현/테스트할 필요도 없으며, 공식을 숨기고 계산 결과를 단순화된 형태로 보여줄 수 있습니다. 하지만 이러한 이점은 숫자 또는 텍스트를 셀로 반환하는 경우에만 활용 가능하다는 한계가 있습니다. 본 문서를 통해, 이러한 한계를 극복하고 스프레드시트를 한층 강력한 툴로 활용하는 방법을 소개해 드렸습니다. 또 스프레드시트를 이용하여 오라클의 데이터 마이닝 기능과 기타 API에 직접 접근하는 것이 가능함을 확인했습니다.
결론
한층 강력한 스프레드시트 환경을 구현함으로써, 오라클의 Java API, PL/SQL API와 같은 새로운 기술이 엔드유저에 의해 활용되기까지 소요되는 기간을 단축할 수 있습니다. 본 문서에서 제시된 아이디어를 활용하면, 일반 사용자들이 Java API를 직접 활용하여 예측, 분석 등의 의사 결정 프로세스에 활용하는 것이 가능합니다.
Agust Egilsson (egilsson@hi.is)은 수학과 교수이자 오라클 데이터베이스 전문가이며, 열정적인 PL/SQL, Java 개발자입니다.
|