PK -Aoa,mimetypeapplication/epub+zipPK-AiTunesMetadata.plistV artistName Oracle Corporation book-info cover-image-hash 264094912 cover-image-path OEBPS/dcommon/oracle-logo.jpg package-file-hash 876486605 publisher-unique-id E12218-07 unique-id 200564073 genre Oracle Documentation itemName Oracle® Data Mining Application Developer's Guide, 11g Release 2 (11.2) releaseDate 2011-06-30T14:01:10Z year 2011 PKIs[VPK-AMETA-INF/container.xml PKYuPK-AOEBPS/cover.htmO Cover

Oracle Corporation

PK[pTOPK-AOEBPS/whatsnew.htm# What's New in the Oracle Data Mining APIs?

What's New in the Oracle Data Mining APIs?

This section describes new features in the Oracle Data Mining APIs. It includes the following sections:


See Also:

Oracle Data Mining Concepts for additional information about new features and for information about features that were new or deprecated in Oracle Data Mining 11g Release 1

Oracle Data Mining 11g Release 2 (11.2.0.3) API New Features

The Oracle Data Mining Java API is deprecated in this release.


Note:

Oracle recommends that you not use deprecated features in new applications. Support for deprecated features is for backward compatibility only

Oracle Data Mining 11g Release 2 (11.2.0.1) API New Features

This section lists the changes that have been introduced in the Oracle Data Mining 11.2 PL/SQL API:

PK:i(#PK-AOEBPS/title.htmG Oracle Data Mining Application Developer's Guide, 11g Release 2 (11.2)

Oracle® Data Mining

Application Developer's Guide

11g Release 2 (11.2)

E12218-07

July 2011


Oracle Data Mining Application Developer's Guide, 11g Release 2 (11.2)

E12218-07

Copyright © 2005, 2011, Oracle and/or its affiliates. All rights reserved.

Primary Author:  Kathy L. Taylor

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

This software or hardware and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

PKPK-A OEBPS/loe.html List of Examples

List of Examples

PK9qlPK-AOEBPS/xform_text.htm Preparing Text for Mining

4 Preparing Text for Mining

Oracle Data Mining supports the mining of data sets that have one or more text columns. These columns must undergo a special preprocessing step whereby text tokens known as terms are extracted and stored in a nested column. The transformed text can then be used as any other attribute in the building, testing, and scoring of models. Any algorithm that supports nested data can be used for text mining. (See Table 3-2 in Chapter 3.)

This chapter explains how to use PL/SQL to prepare a column of text for mining.


Note:

Oracle Data Mining includes sample programs that illustrate text transformation and text mining using the PL/SQL API. Refer to Oracle Data Mining Administrator's Guide for information about the Oracle Data Mining sample programs.


See Also:

Oracle Data Mining Concepts for information about text mining

This chapter contains the following sections.

Oracle Text Routines for Term Extraction

Oracle Data Mining uses specialized Oracle Text routines to preprocess text data. Oracle Text is a technology within the database for building text querying and classification applications.

Oracle Text provides the following facilities for the Oracle Data Mining term extraction process:

In PL/SQL, the term extraction process requires the use of these Oracle Text facilities. (See "Using Text Transformation".)


See Also:

Oracle Text Application Developer's Guide and Oracle Text Reference for information on Oracle Text


Note:

The Oracle Text facilities for Oracle Data Mining are documented in this chapter. They are not documented in the Oracle Text manuals.


Note on Terminology:

Text terms are also known as features. In text mining, a feature is a word or group of words extracted from a text document. Features (terms) are the fundamental unit of text that can be manipulated and analyzed.

The feature extraction mining function (NMF algorithm in Oracle Data Mining) and text mining transformation both perform a kind of feature extraction.

  • A feature extraction model creates features that represent fundamental qualities of multiple attributes. The model operates on the features instead of the original attributes.

  • Text transformation changes a text document into a collection of features, each one representing a fundamental characteristic of the document. The model operates on the text features instead of the original document.


Term Extraction in the Sample Programs

A good place to start in learning the term extraction process is with the sample programs. The following sample programs contain term extraction code for text mining:

Two sample PL/SQL programs use the data prepared by dmsh.sql to mine text.

Both these programs mine a table of customer data that includes a nested column of text data called COMMENTS. The COMMENTS column has been pre-processed by dmsh.sql. The models created by these programs are referenced in the following example from a Linux system.

-- Run the programs to create the models
SQL> @ $ORACLE_HOME/rdbms/demo/dmtxtnmf.sql
SQL> @ $ORACLE_HOME/rdbms/demo/dmtxtsvm.sql
-- List the models created by the programs
SQL> SELECT model_name, mining_function, algorithm FROM user_mining_models;
 
MODEL_NAME                MINING_FUNCTION              ALGORITHM
------------------------  ---------------------------  ------------------------
T_SVM_CLAS_SAMPLE         CLASSIFICATION               SUPPORT_VECTOR_MACHINES
T_NMF_SAMPLE              FEATURE_EXTRACTION           NONNEGATIVE_MATRIX_FACTOR

See Also:

Oracle Data Mining Administrator's Guide. This manual provides instructions for obtaining and running the sample programs. It includes information about the build, training, and scoring data used by these programs.

From Unstructured Data to Structured Data

The pre-processing steps for text mining create nested table columns of type DM_NESTED_NUMERICALS from columns of type VARCHAR2 or CLOB. Each row of the nested table specifies an attribute name and a value. The DM_NESTED_NUMERICALS type defines the following columns.

attribute_name     VARCHAR2(4000)
value               NUMBER)

The term extraction process treats the text in each row of the original table as a separate document. Each document is transformed to a set of terms that have a numeric value and a text label. Within the nested table column, the attribute_name column holds the text and the value column holds the numeric value of the term, which is derived using the term frequency in the document and in the document collection (other rows).

For example, the following query returns various attributes of customer 102998, including a text column of comments. The text column has not been transformed.

SQL> select cust_id, cust_gender, cust_income_level, affinity_card, comments
             from mining_build_text
             where cust_id = 102998;
 
CUST_ID C  CUST_INCOME_LEVEL     AFFINITY_CARD COMMENTS
------- -- --------------------  ------------- --------------------------------
102998  M  J: 190,000 - 249,999  1             I wanted to write you to let you
                                               know that I've purchased several
                                               items at your store recently and
                                               have been very satisfied with my
                                               purchases. Keep up the good work.
  

The following query returns the same attributes of customer 102998, but the text in the comments column has been transformed. The query extracts the ATTRIBUTE_NAME and VALUE columns from the nested table that holds the transformed text.

SQL> select b.cust_id, b.cust_gender, b.cust_income_level, b.affinity_card, n.*
             from mining_build_nested_text b,
                  table(b.comments) n
             where b.cust_id = 102998
             order by n.attribute_name;
 
CUST_ID  C  CUST_INCOME_LEVEL    AFFINITY_CARD  ATTRIBUTE_NAME  VALUE
-------  -- -------------------  -------------  --------------  --------
102998   M  J: 190,000 - 249,999  1              GOOD            .26894
102998   M  J: 190,000 - 249,999  1              ITEMS            158062
102998   M  J: 190,000 - 249,999  1              KEEP             238765
102998   M  J: 190,000 - 249,999  1              KNOW              .2006
102998   M  J: 190,000 - 249,999  1              LET              299856
102998   M  J: 190,000 - 249,999  1              PURCHASED        142743
102998   M  J: 190,000 - 249,999  1              PURCHASES        173146
102998   M  J: 190,000 - 249,999  1              RECENTLY        .195223
102998   M  J: 190,000 - 249,999  1              SATISFIED       .355851
102998   M  J: 190,000 - 249,999  1              SEVERAL         .355851
102998   M  J: 190,000 - 249,999  1              STORE          .0712537
102998   M  J: 190,000 - 249,999  1              UP              .159838
102998   M  J: 190,000 - 249,999  1              WANTED          .355851
102998   M  J: 190,000 - 249,999  1              WORK            .299856
102998   M  J: 190,000 - 249,999  1              WRITE           .355851

The ATTRIBUTE_NAME column holds an item of text from the original comments column. The VALUE column holds the term value. Note that not all words from the original comments column are extracted as terms. For example, the articles the and to are not included.

Steps in the Term Extraction Process

The steps in the term extraction process are summarized in this section. Further details and specific syntax requirements are explained later in this chapter.

Transform a Text Column in the Build Table

First transform the text in the build data. During this process you will generate the text term definitions, which you will reuse for the test and apply data. Perform the following steps:

  1. Create an index on the text column in the build table.

  2. Create an SVM_CLASSIFIER preference for the index.

  3. Define a table to hold the categories specified by the SVM_CLASSIFIER index.

  4. Use the FEATURE_PREP table function to create the term definitions and populate an intermediate terms table.

  5. Use the FEATURE_EXPLAIN table function to populate the final terms table.

  6. Replicate the columns of the original build table (using a view or another table), replacing the text column with a nested table column. Load the terms from the final terms table into the nested table column.

Transform a Text Column in the Test and Apply Tables

The test and apply data must undergo the same pre-processing as the build data. To transform the test and apply data, you will reuse the term definitions generated for the build data. Perform the following steps:

  1. Create an index on the text column in the test or apply table.

  2. Use the FEATURE_PREP table function to populate an intermediate terms table. Use the term definitions previously generated for the build data.

  3. Use the FEATURE_EXPLAIN table function to populate the final terms table.

  4. Replicate the columns of the original test or apply table, replacing the text column with a nested table column. Load the terms from the final terms table into the nested table column.

Create the Index and Index Preference

Oracle Text processing requires a text index. Oracle Text supports several types of indexes for querying, cataloging, and classifying text documents. The Oracle Data Mining term extraction process requires a CONTEXT index for text querying.

You must create an index for each text column to be transformed. Use the following syntax to create the index.

SQL>CREATE INDEX index_name ON table_name(column_name)
                   INDEXTYPE IS ctxsys.context PARAMETERS ('nopopulate');

Note:

This statement creates a basic CONTEXT index. You can further define the characteristics of the index by specifying additional arguments to the CREATE INDEX statement. Refer to Oracle Text Reference for details.

Oracle Text supports index preferences for overriding the default characteristics of an index. The CREATE_PREFERENCE procedure in the Oracle Text package CTX_DDL creates a preference with the name and type that you specify. The SVM_CLASSIFIER preference type defines the characteristics of an index for Oracle Data Mining.

You must create an index preference when you prepare the build data. It will be reused when you prepare the test and apply data. Use the following syntax to create the index preference.

SQL>EXECUTE ctx_ddl.create_preference('preference_name', 'SVM_CLASSIFIER');

The SVM_CLASSIFIER index preference uses a predefined table with two numeric columns: ID and CAT. ID holds the case ID; CAT holds the category. The category table is used for internal processing. You must create the category table using the following syntax.

SQL>CREATE TABLE category_table_name(id NUMBER, cat NUMBER);

Create the Intermediate Terms Table

The FEATURE_PREP table function in the CTXSYS.DRVODM Oracle Text package extracts terms from a text column using an index preference of type SVM_CLASSIFIER. FEATURE_PREP creates a table of term definitions from the build data and reuses these definitions for the test and apply data.

FEATURE_PREP returns an intermediate terms table.

FEATURE_PREP Calling Syntax

FEATURE_PREP is an over-loaded function that accepts two different sets of arguments. You will specify one set of arguments for the build data and another set for the test and apply data.

--- syntax for build data ---
            CTXSYS.DRVODM.FEATURE_PREP (
                   text_index                IN   VARCHAR2,
                   case_id                   IN   VARCHAR2,
                   category_tbl              IN   VARCHAR2,
                   category_tbl_id_col       IN   VARCHAR2,
                   category_tbl_cat_col      IN   VARCHAR2,
                   feature_definition_tbl    IN   VARCHAR2,
                   index_preference          IN   VARCHAR2)
                RETURN DRVODM;

--- syntax for test/apply data ---
           CTXSYS.DRVODM.FEATURE_PREP (
                   text_index                IN   VARCHAR2,
                   case_id                   IN   VARCHAR2,
                   feature_definition_tbl    IN   VARCHAR2,
                RETURN DRVODM;

FEATURE_PREP Return Value

FEATURE_PREP returns the following columns. The SEQUENCE_ID column holds the case ID; the ATTRIBUTE_ID column holds the term ID.

Name                   NULL?   Type
---------------------- ------- ------
SEQUENCE_ID                    NUMBER
ATTRIBUTE_ID                   NUMBER
VALUE                          NUMBER

FEATURE_PREP Arguments

FEATURE_PREP accepts the arguments described in Table 4-1.

Table 4-1 FEATURE_PREP Table Function Arguments

Argument NameData Type

text_index

VARCHAR2

Name of the index on the text column in the build, test, or apply table.

case_ID

VARCHAR2

Name of the case ID column in the build, test, or apply table.

category_tbl

VARCHAR2

Name of the table used by the SVM_CLASSIFIER index preference.

Specify this argument only for build data.

category_tbl_id_col

VARCHAR2

Specify 'id'. This is the name of the ID column in the table used by the SVM_CLASSIFIER index preference.

Specify this argument only for build data.

category_tbl_cat_col

VARCHAR2

Specify 'cat'. This is the name of the CAT column in the table used by the SVM_CLASSIFIER index preference.

Specify this argument only for build data.

feature_definition_tbl

VARCHAR2

Name of the term definition table created by FEATURE_PREP. The columns of the term definition table are:

Name         Null?     Type
---------------------------------
CAT_ID                   NUMBER
TYPE                     NUMBER
RULE                     BLOB

index_preference

VARCHAR2

Name of the SVM_CLASSIFIER index preference.

Specify this argument only for build data.


FEATURE_PREP Example

The following example creates an intermediate terms table called txt_term_out. The FEATURE_PREP table function extracts terms from a text column with an index called build_text_idx. The text column is in a build table with a case ID column called cust_id. The index preference txt_pref is applied to the index using the id and cat columns in the table cat_tbl. FEATURE_PREP creates a table of term definitions called txt_pref_terms.

CREATE TABLE txt_term_out AS
SELECT *
  FROM TABLE(ctxsys.drvodm.feature_prep (
               'build_text_idx',
               'cust_id',
               'cat_tbl',
               'id',
               'cat',
               'txt_pref_terms',
               'txt_pref'));

Create the Final Terms Table

The FEATURE_EXPLAIN table function in the CTXSYS.DRVODM Oracle Text package extracts the term values from the definitions created by FEATURE_PREP and appends the associated word to each value.

FEATURE_EXPLAIN returns the final terms table.

FEATURE_EXPLAIN Calling Syntax

The calling syntax of FEATURE_EXPLAIN is described as follows.

            CTXSYS.DRVODM.FEATURE_EXPLAIN (
                   feature_definition_tbl     IN   VARCHAR2,
                RETURN DRVODM;

FEATURE_EXPLAIN Return Value

FEATURE_EXPLAIN returns the following columns.

Name              Type
---------------    ---------------
text               VARCHAR2(160)
type               NUMBER(3)
ID                 NUMBER
score              NUMBER

FEATURE_EXPLAIN Arguments

FEATURE_EXPLAIN accepts a single argument: the terms definition table created by FEATURE_PREP.

FEATURE_EXPLAIN Example

The following example creates a final terms table called txt_final_terms using the intermediate terms table txt_term_out. The FEATURE_EXPLAIN table function returns the terms specified in the terms definition table txt_pref_terms.

SQL> create table txt_final_terms as
                   select A.sequence_id, B.text, A.value
                         FROM txt_term_out A,
                              TABLE(ctxsys.drvodm.feature_explain(
                                    'txt_pref_terms')) B
                         WHERE A.attribute_id = B.id;

Populate a Nested Table Column

Use the final terms table to populate a nested table column of type DM_NESTED_NUMERICALS.

The following example creates the table mining_build_nested_text. (Alternatively, you could create a view.) The table has a case ID column of customer IDs and three customer attribute columns: age, education, and occupation. It also includes a comments column of type DM_NESTED_NUMERICALS created from the terms table txt_final_terms.

SQL> CREATE TABLE mining_build_nested_text
       NESTED TABLE comments store AS build_comments
      AS
    SELECT non_text.cust_id,
      non_text.age,
      non_text.education,
      non_text.occupation,
     txt.comments
     FROM
     mining_build_text non_text,
     ( SELECT features.sequence_id,
              cast(COLLECT(dm_nested_numerical(features.text,features.value))
                           as dm_nested_numericals)  comments
       FROM txt_final_terms features
       group by features.sequence_id) txt
     WHERE non_text.cust_id = txt.sequence_id(+);

Example: Transforming a Text Column

In the following example, a text column in MINING_BUILD_TEXT is transformed to a nested table column in MINING_BUILD_NESTED_TEXT. The same text column in MINING_APPLY_TEXT is transformed to a nested table column in MINING_APPLY_NESTED_TEXT.

Both MINING_BUILD_TEXT and MINING_APPLY_TEXT have the following columns.

 Name                              Null?    Type
 --------------------------------- -------- ---------------------------
 CUST_ID                           NOT NULL NUMBER
 AGE                                        NUMBER
 EDUCATION                                  VARCHAR2(21)
 OCCUPATION                                 VARCHAR2(21)
 COMMENTS                                   VARCHAR2(4000)

The following statements create the indexes.

SQL> create index build_text_idx on mining_build_text (comments)
             indextype is ctxsys.context paramyeters ('nopopulate');
SQL> create index apply_text_idx ON mining_apply_text (comments)
             indextype is ctxsys.context parameters ('nopopulate');

The following statements create the index preference and its table.

SQL> execute ctx_ddl.create_preference('idx_pref', 'SVM_CLASSIFIER');
SQL> create table idx_pref_cat (id number, cat number);

The following statement returns the intermediate terms in the table BUILD_TERMS_OUT. It also creates the table FEATURE_DEFS and populates it with the term definitions.

SQL>  create table build_terms_out as
              select * from
                     table (ctxsys.drvodm.feature_prep
                                  ('build_text_idx',
                                   'cust_id',
                                   'idx_pref_cat',
                                   'id',
                                   'cat',
                                   'feature_defs',
                                   'idx_pref'));

The following statement returns the final terms in the table BUILD_EXPLAIN_OUT.

SQL> create table build_explain_out as
             select a.sequence_id,
                    b.text,
                    a.value
             from build_terms_out a,
             table (ctxsys.drvodm.feature_explain('feature_defs')) b
             where a.attribute_id = b.id;

The following statement creates the table MINING_BUILD_NESTED_TEXT. This table contains the non-text attributes from the original build table and a nested table of comments. This table can be used to build a model.

SQL> create table mining_build_nested_text
        nested table comments store as build_comments
          as select non_text.cust_id,
                    non_text.age,
                    non_text.education,
                    non_text.occupation,
                    txt.comments
              from mining_build_text non_text,
             (select features.sequence_id,
                cast(collect(dm_nested_numerical(features.text,features.value))
                as dm_nested_numericals)  comments
              from build_explain_out features
              group by features.sequence_id) txt
              where non_text.cust_id = txt.sequence_id(+);

The following statement creates the intermediate terms table for the comments column in the apply table, MINING_APPLY_TEXT. It uses the term definitions in the FEATURE_DEFS table, which was created during the pre-processing of the comments column in MINING_BUILD_TEXT.

SQL>  create table apply_terms_out as
              select * from
                     table (ctxsys.drvodm.feature_prep
                                  ('apply_text_idx',
                                   'cust_id',
                                   'feature_defs'));

The following statement creates the final terms table for apply.

SQL> create table apply_explain_out as
             select a.sequence_id,
                    b.text,
                    a.value
             from apply_terms_out a,
             table (ctxsys.drvodm.feature_explain('feature_defs')) b
             where a.attribute_id = b.id;

The following statement creates the table MINING_APPLY_NESTED_TEXT. This table contains the non-text attributes from the original apply table and a nested table of comments. This table can be used to apply the model.

SQL> create table mining_apply_nested_text
        nested table comments store as apply_comments
          as select non_text.cust_id,
                    non_text.age,
                    non_text.education,
                    non_text.occupation,
                    txt.comments
              from mining_apply_text non_text,
             (select features.sequence_id,
                cast(collect(dm_nested_numerical(features.text,features.value))
                as dm_nested_numericals)  comments
              from apply_explain_out features
              group by features.sequence_id) txt
              where non_text.cust_id = txt.sequence_id(+);
PK{ǟyPK-AOEBPS/preface.htm Preface

Preface

This manual describes the programmatic interfaces to Oracle Data Mining. You can use the PL/SQL and Java interfaces to create data mining applications or add data mining features to existing applications. You can use the data mining SQL operators in applications or in ad hoc queries.


Note:

The Oracle Data Mining Java API is deprecated in this release.

Oracle recommends that you not use deprecated features in new applications. Support for deprecated features is for backward compatibility only


This manual should be used along with the demo applications and the related reference documentation. (See "Related Documentation".)

The preface contains these topics:

Audience

This manual is intended for database programmers who are familiar with Oracle Data Mining.

Documentation Accessibility

For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

Access to Oracle Support

Oracle customers have access to electronic support through My Oracle Support. For information, visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are hearing impaired.

Related Documentation

The documentation set for Oracle Data Mining is part of the Oracle Database 11g Release 2 (11.2) Online Documentation Library. The Oracle Data Mining documentation set consists of the following documents:

Conventions

The following text conventions are used in this document:

ConventionMeaning
boldfaceBoldface type indicates graphical user interface elements associated with an action, or terms defined in text or the glossary.
italicItalic type indicates book titles, emphasis, or placeholder variables for which you supply particular values.
monospaceMonospace type indicates commands within a paragraph, URLs, code in examples, text that appears on the screen, or text that you enter.

PK1ɥPK-AOEBPS/index.htmTA Index

Index

A  B  C  D  E  F  G  I  J  K  L  M  N  O  P  R  S  T  U 

A

ADD_COST_MATRIX, 6.4
ADP, 2.1.2, 3.1.2, 5.3.2
See Automatic Data Preparation
ALGO_NAME, 5.2.1
algorithms, 5.2.2
ALL_MINING_MODEL_ATTRIBUTES, 2.2, 3.2.4.1
ALL_MINING_MODEL_SETTINGS, 2.2, 5.2.6
ALL_MINING_MODELS, 2.2
anomaly detection, 1.1.3, 5.2.2, 5.3.1, 5.3.1, 6.5
apply, 2.1.1.2
batch, 6.5
real time, 6.2
See also scoring
ApplySettings object, 2.4.3.6
Apriori, 5.2.2, 5.2.2
association rules, 5.2.2, 5.3.1, 5.4
attribute importance, 3.2.6, 5.2.2, 5.3.1, 5.4
attribute name, 3.2.5
attribute subname, 3.2.5
attributes, 3, 3.2

B

build data, 3.1.2
BuildSettings object, 2.4.3.4

C

case ID, 2.4.3.1, 3.1, 3.1, 3.1.1, 3.2.4, 6.5.1
case table, 3
catalog views, 2.2
categorical, 3.2.3
centroid, 5.4
classes, 3.2.3
classification, 5.2.2, 5.2.2, 5.3.1
CLUSTER_ID, 1.1.1, 2.3, 6.3.2.1
CLUSTER_PROBABILITY, 2.3, 6.3.2.2
CLUSTER_SET, 2.3, 6.3.2.3
clustering, 2.3, 5.2.2, 6.3.2
collection types, 3.3.1, 4.3
constants, 5.3.1
cost matrix, 6.4
costs, 6.3.1.3, 6.4
CREATE_MODEL, 2.1.1.1, 5.3
CTXSYS.DRVODM, 4.1

D

data
dimensioned, 3.3.2
for data mining, 3
missing values, 3.4
multi-record case, 3.3.2
nested, 3.3
preparing, 2.1.2
sparse, 3.4
transactional, 3.3.2, 3.3.4
transformations, 5.3.2
data dictionary views, 2.2
Data Mining Engine, 2.4.1, 2.4.3.4, 2.4.3.4
data types, 3.1.1
DBMS_DATA_MINING, 2.1, 5.3
DBMS_DATA_MINING_TRANSFORM, 2.1, 2.1.2, 5.3.2
DBMS_PREDICTIVE_ANALYTICS, 1.3, 2.1, 2.1.3
DBMS_SCHEDULER, 2.4.3.3
Decision Tree, 2.3, 5.2.2, 5.3.1, 5.4, 6.3, 6.3.1.4
demo programs, 5.5.3
dimensioned data, 3.3.2
DM_NESTED_CATEGORICALS, 3.2.3, 3.3.1.2
DM_NESTED_NUMERICALS, 3.2.3, 3.3.1.1, 3.3.3, 4.3, 4.3, 4.4.6
dmsh.sql, 4.2
dmtxtfe.sql, 4.2

E

embedded transformations, 2.1.2, 3.1.2, 5.3.2
EXPLAIN, 2.1.3

F

feature extraction, 2.3, 5.2.2, 5.3.1, 6.3.3, 6.3.3
FEATURE_EXPLAIN table function, 4.1, 4.4.1, 4.4.5.1
FEATURE_ID, 2.3, 6.3.3.1
FEATURE_PREP table function, 4.1, 4.4.1, 4.4.4.1
FEATURE_SET, 2.3, 6.3.3.3
FEATURE_VALUE, 2.3, 6.3.3.2

G

GET_MODEL_DETAILS, 2.1.1.1, 5.4
GET_MODEL_DETAILS_XML, 6.3.1.4
GLM, 5.2.2, 5.4
See Generalized Linear Models

I

index preference, 4.1

J

Java API, 2.4, 7

K

k-Means, 5.2.2, 5.3.1, 5.4

L

linear regression, 2.3, 5.3.1
logistic regression, 2.3, 5.3.1

M

market basket data, 3.3.4, 3.3.4
Minimum Description Length, 5.2.2, 5.2.2
mining model schema objects, 2.2, 5.5
missing value treatment, 3.4.3
missing values, 3.4
Model, 2.4.3.4
model details, 3.2.6, 5.1, 5.4
model signature, 3.2.4
models
algorithms, 5.2.2
deploying, 6.2
privileges for, 5.5.2
scoring, 6
settings, 5.2.6
steps in creating, 5.1

N

Naive Bayes, 5.2.2, 5.3.1, 5.4
nested data, 3.3, 4.3, 4.4.6
NMF, 5.4
See Non-Negative Matrix Factorization
Non-Negative Matrix Factorization, 5.3.1
numerical, 3.2.3

O

O-Cluster, 5.2.2, 5.3.1
ODMS_ITEM_ID_COLUMN_NAME, 3.3.4
ODMS_ITEM_VALUE_COLUMN_NAME, 3.3.4
One-Class SVM, 1.1.3, 5.3.1
Oracle Text, 4.1
outliers, 1.1.3.1

P

PhysicalDataSet, 2.4.3.1
PhysicalDataSet object, 2.4.3.1
PIPELINED, 3.2.6
PL/SQL API, 1, 1, 2.1
PREDICT, 2.1.3
PREDICTION, 1.1.2, 1.1.3.3, 2.3, 6.3.1.1, 6.4
PREDICTION_BOUNDS, 2.3, 6.3.1.2
PREDICTION_COST, 2.3, 6.3.1.3
PREDICTION_DETAILS, 1.2, 2.3
PREDICTION_PROBABILITY, 1.1.1, 1.1.2, 1.1.3.1, 2.3, 6.3, 6.3.1.5
PREDICTION_SET, 2.3, 6.3.1.6
predictive analytics, 1.3, 2.1.3
PREP_AUTO, 5.3.2
privileges, 5.5.2
PROFILE, 1.3, 2.1.3

R

regression, 5.2.2, 5.2.2, 5.3.1
REMOVE_COST_MATRIX, 6.4
reverse transformations, 3.2.4.1, 3.2.6, 3.2.6, 5.4
rules, 6.3.1.4

S

sample programs, 5.5.3
scoping of attribute name, 3.2.5
scoring, 1.1.1, 2.1.1.2, 2.3, 6
batch, 6.5
data, 3.1.2
saving results, 6.3.4
See also apply
settings table, 2.4.3.2
sparse data, 3.4, 3.4
SQL AUDIT, 5.5
SQL COMMENT, 5.5
SQL data mining functions, 1, 2.3
STACK, 2.1.2, 5.3.2
supermodels, 3.1.2
supervised mining functions, 5.3.1
Support Vector Machine, 5.2.2, 5.3.1, 5.4
SVM
See Support Vector Machine
SVM_CLASSIFIER index preference, 4.1, 4.4.1, 4.4.3

T

target, 3.2.2, 3.2.4, 3.2.4.1
test data, 3.1.2
text mining, 4, 4
text transformation, 4
Java, 4.1
PL/SQL, 4.1
transactional data, Preface, 3.1, 3.3.2, 3.3.2, 3.3.4, 3.3.4
transformation list, 5.3.2
transformations, 2.1.2, 3, 3.2.4.1, 3.2.6, 3.2.6, 5.3.2
transparency, 3.2.6, 5.4

U

unsupervised mining functions, 5.3.1
PK +TTPK-AOEBPS/img/binning.gifA6GIF89a)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8s܉2ϟ@ JѣH*]ʴiRPJJիjʵׯ`bKٳh۷pʝKݻx[hڿ L8O+^̸? KL囇k̹>/Mi?^ͺuc˞M[pj׸sӼv{ _μsđK<سky<bw<^ѳW|^t3=|睁  (qBX"(m ja (T%'"4H_88z3¨=ʨcyBH#58KhPF)%L-G1by\*Y<&YaaN&wp)GUv%z@%Ydd &dk٦?^%lhO裐:T\Y'09ޝ}Yin%F颤骬:)z*i~(ZzJ*㲄ɫi~i jK)2hCN廅imjeyoΉKg]l0m X G,Z /pŹ=,v1 \`$"xQ"k 81QD-^T =~RH%MDRJ-=jSL5męSN=}P˔4t#ђGt)SA^ŚUV]~*uGFW;YMH۶huśW^`㪕uۤ Xx`l/~ dKV8eʜVZhҥMwjڣ˒ݬkC+M,mܳs_F+w1jōGod3'~0܋S.t됣wǮtG^zUSe^cko}kގs D0A :Ϸ ;Q8$DOD  sQ

,UW_TUg>Xo5׫dW_I UWa%vݎE6YeeYg6Zi--ZkhZm[oU[q%w`E7]uEH)v߅7jݕ^{Ք^|-7`&-F8B=Wa`b'p "Lp!ÆB(q"Ŋ/b̨qzq$ɒ&OLr%˖._Œ)s&͗"Aެs'Ϟ> *t(Ѣ>CDjt)ӦNB*u*UJqu+׮^ ;5'VfϢMv-[W;m+w.ݺv-ۼ~,x̽!Nx1ƋEx2ʖ/l2Ξ?=roYѦON}0֚UÎ-{]׶_έ{7o].|8񠜋#O|h̟C.=֯?};{/<~|`ϣOּCe>;ϯIC Xx ֗ Bxr? 4xaB 6tbD)VxcF dH#I4yeJ+YtfL<ygN;yhP7k5ziRK6u4cQSVzkVJnlXcNZmZkٶu[sֵ+f^{p` 6|qbł6vXbɓ)W|sfƐ9wܔ/ѣI6}ujիYv:kٳi׶ [gݻy{xpÉ7~˙7ytөW^;s۹+y|xc}˷wׇ>~~o¯ <\8-353I+26@q$QP4-P, PEOG]ď@LEREKN5tS-J\M?sbQ@CU-a5XuE.g4^KUVZ+R_%Y5vZm]`Tl3Ke6[iiZMtw]_%]yݽW_V['p "Lp!ÆB(q"Ŋq#ǎ?j̸QH1HҤJJq̗5m$͔!Q,R(Q7Yҥ Bhq*ժVbͪu+׮^ (Բ3] ɴKiծMsgҸjϼ,M+.aMM,U,ƎC,y2&|hO֜;-iOGog\p麙.{7޾.m=ݖ~2un(g8q-n<ϣO7qQ_Ɍe߭owicGH⧚}kyARh[^Wrءq#~HbnT+آ(^bAX9ݘ;g"ӋCY$$L:B$[r٥eT4NYgLoWmYt{P"٨B:࢓RZbjnzQU@6ĩmfd穡Z:dNꪯ댬.&O ƨydژijV+[dx7פfkr뭽Su{/".DO* JLp‚w!| $[< F{BZ'i[f{q|6֗38u2-mS>ԩ6=uLEl?r_ +a^t}6QVkV5w.g-w\Ga6<<+~nh͸‰Kyw}v/ߚO *ɍ~yK6K|CNw4B>(~:䶳='n{;9o?};8pdɓ);e̛9[eٱʣI&4WͩYFڵ\Ѧi׶Mu쪰uoճo7~d 5:hOƙ芩9hV|XM.(bEZiu訏驡jv[oUozo n<[sn~>_ޡ7 RW z :Q=(b9'`!S#ڂf"-z蚅-8#5x"#SX#A ɞ?y$IU^M~הQUZIcT^%(%&uy&*f&mfdq*5e&yB}9u :Jy矉gv "Zc裦29N'y8zDK^GƘSiZVZ륯,r+*ݩɺʬW˪n:VeRyAԗ.*֕WR]b{8r$+[nl›/6K+a[zEvdz2# q.o*[p+뫿swȻFrŰbv+q3M5_V(Dwg#NS/}7$!;9'[ϼƛ{ oߨ7^{jc׫/w:ځ(4ڧ?m=A.e<7Ov_皖Oq&+ԉi.LӌƽwG,a;$ >ɂc 3E}s W"faR< ZQqk1]a"^FH|lH( q(2"gs  3Kwlc #WtmmZbM>IҔ/h*ɟF򇞜ޝ؟KnRDH+SvɔCR#勖u+X&H$Pz?)DaiT0u*dĜ%5&PIS1;oZPOag+yyjћ'>BOu-?I|TgAj"k;'7Ё*2 B-%9T(Dщn@ (0*\ȰÇ#JHŋ'ȱǏ CIɓ eA0cʜ90͛8sɳ˒> J(OH*]Tȟ\JɴՓFjʕկ`ÊKٳe]˶۷pʝKݻx˷߿ L+^̸ǐ#KVw˘3k̹ʞCM3A^ͺװM۸sNc-ȓ孼У{$.YSνOyϫ_mپ}h& 6>xPVhJPv8B($h(,HY)(4h#鹨x@)2H#L62-Xf%9RyVn)dhv7KR& IY*i!4J|XEFhhV((0fZʧ>V钗bjhsRkij ꤗr**k~>z@$XA .dC%NXqb4nGCnQH"UL R˔+[z< 3͓4I%ʛ3 SQD,9)H.XZUYnWa2llGG)ZqOksݛq-]-&5ɴ0۽gbcȑ%O\r²륉qy];|m[׈\4aҚ2o'N0]N캣uB?XHS_?mCGnwqկgg|˝Nm;SN=tA#,>gK&d*:Ps/63,7֞$qFk+ _)pCpDKPEV#ϹZ:rK.J0ì:141n{Q#_3_Z}i[w Pbă⒝\.xfxVרeL&G#&qpͷfXs^z瀯6:uatzlU5謑Z8ᇋ{[yO|awnQ&nvWVk_v[/z?N!7tvsvj+WVԥQwv'}x⯕xwޕ~z=~K H*\ȰÇ#JHhȱǏ CIɓ(S\ɲˏXI͛8sɳϟ@FѣH*]%FPJJիXJشׯ`Ê-TٳhӪ]˶CcYfKݤ1˷߿$zW$ˆ+8lǐ#KLYa˘3k̹ϠCMӠ+^ͺkc˞M۸1ͻߒ)|ȓ+_^8sΟKNy^o}ËxO_ϾeϪW~(`M7^ .`{6(gEXva zh(R&ޑb0(cZ+&ͨ e΢F"M4CN]*u*ժV9|u+׮Ca^VgDZJDZmjWͫw۔u.ߴ"RDiN$>WpP‘!W"ōqn&k.ҦK[i٨iǶF ,kڰS;bmo>Kv 7qû]7-ݵ5I{oe=vw~3<ȇ'gO^vɫ-ݺu}r_W||8_x :cyFrh 'X=y\wt Ǣ|&.Vt B7!xW6M' HC*dAF> VVy%D2jh5 ]ىR$~ڷ-."`scP'IXTG^i%I$ uaR Qje_4ayfi>天ʪfrz+~Z騤:)/1*Kn溬w)b+kL;hv)*jjZbbk~{`/`~{mY*꫺,V*/2L[޿sR,h**L/fKLJJ˂UQe*b3; -9ÍKh߉,2S~ s_ 1vWKNXXWdjtl%=(kY=4<9kh(×&6^rؗoym|9f?6Mڮ%&߽z%滳Dzd<($2O_=ݠνU?z_O\8Z> ߿/ h \H'@<ǿ b{| "~/{> K>rw$, "-5̹ 6hC`Vh)Ĝ?Cp.q4?!_X"Hz/Qb'B13urXf9phx4lry|i6 fԮXQX,ŋubu8ƀMaIdH&F- (ٌ֢qXY71-l H6ia|x=ǎzdIU"nrA'aJ>Აq f,XJRfAyܜ>(u],&2-VγA|gxKX6Rd7M]3,;۩Z޴7GK*O1'D)Q`)S Ϥ^ &T2%ZPMc ˪bIYJRsr*QSTEm\A7>rcJZճ7b;{浒*2O4#,N`\9K <0… 1ĉ+Z0cF!jDExɏ)UzԸfK/9v$rfɗ,WYI7w^Bx#Bi?diwJ> %1IeeZFŸeb8fzj\g.$r ZoIdjzg~ hJhx6u">*Nb^inivR gfIjjz kJ+ފkIkg l+.l)lN;-^-fmޢ䞋n}n*;oPދ/Too,p K?kjOl_|fqv rZ,rfir*'.26'X:_>ØBFJNLO@ DPB >QĈ,^F=~RH%fDJ-]SLSZSN=y޼SPE RMTU^5V]{*VXIQEVɳkݾ`Fu^zW^MX_ Ίb 7Y-_fz+wshҥŎ6.jխ]#eZvسmߎYywpDG4y w0|/~~G:? :4zP60̰C84BP! K4ŕPLH*]AUF=!wT-ȑzH#1!G,h „ 2l!Ĉ'R 5 X#Ȑ"G,i$ʄ=6diУ˔2gҬi&Μ:'H#Ё1w-j(Ґ=4)ԨRRrլZr͉ώbv-k,ڴ m-Upҭk7ܻze/mJ0by3nǒ'L2'-k"ϢGM4jӨWN5lʯcӮ w܂q;nȗsU9tSO:v+s;Ǔ/o<׳'o>?t wx * : JJZx!jH!w!!8" R"-"1b|%x#9߉"(#A 9$EZ]]$M:RPZy%Yh"RUj%aeS6&i$my&qʙ!9'y`]'Y'vw z(_ܟ:(Bg(ZdZQz)n()s :1FfZզY|.k )hf4lRbhS:& m2f{jV쵰J劚.F)++K^{[pokFKf⛪zl^̰r#*: 2L-J<%^l6lШ642L4H[K?XsmnY=kIwMG]uMeW']ժν 5n7? 4xaB bD)V0"F7^(F;x#I)72Ȕ';\鱤̛5C4IgPCr iRufΨ#δ %̉Ujz*כYJ Pb>ukti\sֵKۧkI:u,_cYZs0Hg_cj SFwûLT⼈,i^unlqf! Yph-jxpK=~Yu`~I#jϿFyiڻo68Ã}v|Ytԓ6~rd# +So6УB#̫C{0 jj/@8*2oC3CDܑI`n: 6%<Ѻ(iJP{Teki+31:r%J(Ϻ*$3GŶ,QC'/г&1 S+QO:u.@/ 5BU4H?/??RKLm=-ݕ{`}7\TdTfsԕbu͖ۢdڃ\=o [Em7Ky?wU}}+6^mp^%-&5ޘ?/θEwMsUjA^昅mzYu^bwhh|_~㢥ix4vzhc{dOÞnqV[誻Τvw}km[ ~I>0eNƛz8Yt0kWuvS\t)7]?_URT_bȅwt{m9sG/ٖ<%yס3'=E~x/{ߜN7{~r;/^~DO?w)3`j@) 3w9 J0c7mpKdVB=ptcPH"/`88&/ѳ D .jyG^Ķ-z (* )X#"1V$! 7Dю;t336L[C 1_,cIE/cl#,)q|`!8AmRtOVə]g C=τ%h`Ir $W4*c`M8E{Dt.Kհ#=ijC&)sYD[B å ׅ&3Έ@4ܙ@ur}"ԧOyB-<=N4[̑?gsZ'p "Lp!C q"Ŋ/b̨q#ǎ? )r$ɒ&'B p%˖!)s&͚6o %Ϟ> 3e΢F"M4cJN>\*u*ժV>|u+׮@SF*v,ٲzM{ٶnߖݩv.ݺNw/_xew0NxKC,y2ʖ/cάy3Γ,z4ҦONm4։UÎ-{6*]{7޾.|8Ə#O|9ΟC.}:֯c: ;PKqgeF6A6PK-AOEBPS/img/build_settings.gif)GIF89aemmm3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!,eH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JH*]ʴӧPJJզFjʵןJ +ٳhӪ`XpʝKdۺ<˷߸z ,È'Ixǐ#Wl,y%ʘ3k>|yΞC]2h/NuFפc˞9m[M'y\6ȓ?H8Ջaҥ?|ݵ^ڷc=sWgtQ7 {!{ h:|Vhayw gZn(#Wb~t)Ru(#|5ވޥdȝ(b xL6)[E$rb'z\TNi&_ 2eA)% ~#mxeh"w6[g*(P*y. Gҹ'vuIg7觠ik'ay?"&&(fxn8{nލdIuI4hh ѥ.첖u$ڬd2k v#Rb+XWkDj(+;Xr'̂[ދS .{p {-p2]zQ ;jTcj@$XA .da%NXĈ4:xF n@bǒ!Q4rG_83M9uJOAmؓQMrtH$]*tQOnkWaŎM٠f=:XUʚm_2[wOT)Zy &\0Nm Wn߼#3 kƍKvzoE7y_SSZ5 FM_ 8\ o\X#~V|uei)Hnb+lwM宵uAu_XV왵ZY\DNOQ}^zbvguK{ D|#M{2yZ:V hͺe4S䧿.;F0 m§:*傛w+_\qrC5f p@… TD'>hņ=N!NJh)eȏ%M~|"͚6o$IQfΞ>iTs(ѠA"MjRgK].}0eC'vQӑLŒulW\!2JmFJTq)X}0S#48ܨ T*Qҵ|yh͞{V6ܗmVvOMX;Q3>Ir0ۼ%&lsh!~z\ŶiFn_۫ycun1ϟC{9wIqgOyr׿勞vשvErIViuwTeW t)pۀ艧E 7bp"]x-ysMރ],ɸu?:Xqڊ$x1Y#`Ay l%YQ^Y`yi"[n"}.Si "Bh$X hl:U=ZYx㢦Ԏ;V*ܥDf Ԧvjim(hm5 XUKvmu0xa6~Sy$_>kR*7]]1[],(Z^'nfY[hUw ߲ΒVl;WV8Qގ 7}Lp/`KļXq0-%1&1+ܬ+m͕ޜi۪ 2.]є¼4OCQS8|MWݵ) ke睍^Kݶ!R%?_fܜ]jgtyY-0.j#b5KV}[5B[ibr*s;6hg33cڇ8y|aW)&3*'?&V;gYo7f}ϻrHZg0{AKx4%Uphxq_nhEC DQZ*Z 8 GgT6 ˌr.x%1vLax<0_ɿ9J|o|_HĻOb!IH$_#"![AhC"Kߥ7 ȍpҐ9 aCyrr %G L X(./GJ |zK'whV* f̻1S&y_Є=\gHЃ,ٸMۚ3G)vS@iYR| e<@x땞9щJPhu?t_Ȭ rgUbTI3fu雟;GZ@7t(tk,U)?SzTؑF%&Ֆ N}USԧZXj8m*WWVQk*׻Rds^W n\؏1v-c+U … :|1ĉ+Zdƍ r#ȑIʕ,[|RI2aڼ#͜,k|'P==4ϔ/*} UѨ> +ՈNz `זi=6ڵlۺ} 7ܹtцiޤ{v 8 >\7g_~;xiȏ+[yaBf ]:5$Y~ڴM7iþ;ò==ytpċ,жǛUNv_T~B>|S:~=ӻƚSoL Yw`% "H`ʇhMxi(]"hi h߇bMEډ.F58ch:wc,HqXQcVJ>[sNRtUn9\C~Ij JYoa2]nߛ`2՚r "xfPm ch{agɨ^e]inHq jjפU:N֦x  Ӡ!*ixZzDq@$X` &DC 6XE5nر"ŏAz$YI) TK"OyfM9uxsϟ<%ZhQIk4D.n:բUXCnPɯ]:u85Diժn#AMWO_^ݳuդ{Ζ=2kѩQݻ6o{^ sϨwm촅zzpչYvz՗kf2fʏ˘>zۉޟ+д|pAZ1,x-&L @oCTC -$NE sѩ:l+&mDB7 0?&E1󚌰X,Q0l#ԭJ,2H!;'R._4Sk#-+<Ѫ;RCYrO@cA%-t9GH S=XWvD0awdX1z'ڧ>&qW|Gq_Pzm6s]:4ʭon{\t5@-< 'E.+\U>.:>4j*.(Tp%G@U80K!v)l7?'C} Bol xEyRF2ۡıug qx:P D&}h$Ҫ4yL;g3QrFBчtlcǥхF)&сeypb(M)"D%\A~bd)H"rD%+"0[)$vDZ uLN҉c+AE撄k"/LG6$'^R_yMfB߄3yr$14g( N%OZ&Tu>(s( p L0!…BĊP@z8q#E!GLI'HL-KZ9"·=u.(T&M6Ei̔F&USV3+׮^ skVb=Ks(֡Kݎ$ӘBjě7o\HuV` -i| oRueޅX_#[VX-ҦO=;Մ_ڭX6ժ 8wۚQe]pkg#cвR{ϋ4S8ޅk=eynG{wk?zk" NRzWNRaD ơ#z'HT+H_3h⋥Hi^;)_Cڈ?q繨!6W&XVb z{(gk٦or8w♧{)^Q.I"]2*hB铋JZ锖bijiZj{59Pޚ%ֺ_:=mJ,b;({-v-z;I{n.++{d:/"/;0p** C@$X` &DC%NXE5nXaG!E$YI)UK1eΤY3%L9uύ85 Z(I.eSQNZUYnzWa!HV٘K e[qΥ[]yۗRN+,aecȑ%On4e̙#sE&]鵜?f]T׭?F]mܶc{qyY[W^u̥o~0zs_Θ|uӟv[vWH_϶{K"?SpAcK@#Dopp;0 S[, ;QSh_tQF+[DiLG]kvLiG\nD* +<ME0S2/T4K2\rL1G8ӫL9ߜ3O5RK@W˲@PsO75M#$S/GTQ1BG̔O9kBS UEOITHe]TJmMsZ[w%T\u60VY}".cEXQ=5\%6T_ge*`G#bŴWvސצjM3wR]Ktb9 u_M?'{'D=E̓o}`o;E8n5>]x-_gɼ$w_qT_~eXYq[|hEӥXʠ;K^fKȨzVAlWm;+{۞n>un{ú|ppF|wWqɩ}rݮ|弬C?Or7#=okSuHm u34ZqͶkϝJܗghugZú\ye  `0„:|1ĉ+ZH0@;zc!GhdJ'G,p˗MLRcKyٓ'P39iLB_3ԩF1Z5֭\zV`˚=;کO⼙[pFu3ݽDW*-Ի8Y0ҟkD 9ɔ+W$͜u61Ts4]tঌS zCg͉۴n] Zċ?nyUț#daݨ~`һ nwtʾ2w?-E&zxހ&5^N曃Q7Tݗ_nyag!&F!vT.4 h^ 9XbU"d'd(gM7j:iu(Z]7(ewMZ.>If@(fIVx %{98Z3Reva‰)&HjhfNJi6祏=i9jli kD+kԩ lll.;f> ѰI ^mR[mmjKn nr˭{n^ۮf;oZǗo SsZ/Iq_qoq Ih$r*, s26ߌs֬s> tr<MtFH/t@tRO2T_uZu^=*`Mv?mvj}l w@@ 0PaB >QD-^ĘQF=~RH%MDrcC,USL5męSN]rSPEETRA5:eUTU^Ŋ*ƭY~VXVZ<[VZmݾK0-ŹqśW^u%X`…bƍ?ءd,_ƜYfΝ=ZhҥMFZː]6JYla.jn*ip‰?n| eȝ|]dO7_xW_^}zÞ޽xS=1K.Xj6/A/0$KBPA s.Ю3 G>\2~rJU|qFk\q\GS {\!s!Q#_ RSsJ' q"|D12102"l! :87(TSN )4\?QA M3Ǥԫ2gӐDO>sSPRS8G5UUMR;TR%U5NTlVRw}T?O4د.O?*EU\Cf5S{Ii=WHaTKZ[gy.mIe7*bttUy_e5|w6NYR3lFۺ={V݅:lb'h%8یmmVS%[rэAFV{Yd]Ef`Q8g0vbDLj#q~%߅7^t>i,\cZMYbLupIH4iŭKeMzlrG0u jI$Y1RFh=WC.8mFtgflŠ)fr68<9_ǡ_06EGk՜='{׿߽}㿿Թ zBHށNe`h5_̝$G V(h\qb Tb(܊pWs/ǜ&8:7z"nɥDW ]_:jHv>(ZNa~-Y)f9ckw1[YbI<6 ́YX 訐|VjOy*iOA'ٹcҙ\x#=jx*K4xU6V뭼l(pk,E{,jA ~^Δl:ԵmCѸ榫LƋ"Yf,\Ho 7j ?,SZg\dwL,$q(L1@$X` .dC%NXE5nG!E$YIQdK1eΤYM0UOA%ZԨĝG.eSQbL:UYnڵ`UaŎ%[و`Ѯe[5ƥ[]x_K&\a  cȑ%O\e̙5ogС'&]zhM~k؊ vmܹ n[wi߿~Ǒ/|s恡GNwG-jW8;K=:_|Tsz^yo_pp' Arp#L0 !<Ã.B 5q QmPD $Q1/RDI1!YH B&9lI!4R'?LRF$ p.qI.D+sG6i.%Dstr(T8$R3G @>? 46+EGLOnQ _lpAl-GQVdOGV0aER^´OHC3R-UOSq=)0c6Ut1[gGtmïLtj{5_4 ImG9#=URϜ{eUbe]bY{ݵs*݆EsX$9 vTpdvYz2;gtU\^MZT܃V46cE*atQUWuF3g 6NU^ՑDjfK=Vk{ʳ;ZZf;;p[n]  `0… "l1ĉ+Z1ƍ;|1ȑ$K<2ʕAd̙4kΝ<{ 4СD=4)RL:}J0'ԩTZԬ\z-رd˚ڵ2Ӳ} 7ܶs޽|zPD {Ō&n`F 3Ǎ;{,qL^1>xs]ՠ[~}OҚE8yKQi]o.ٸ‹ ;-rssO\oÓ8o˳?:y+oQrQ H u f}MHagX-܆bX蝇 _.85z*%`g"2cJvd[ixۍEx")㓧q(%]>UKIfVbDc]rꥇFfw^B)^fgvR:栝E盠W( IijԓRy~ *J2՞ujV5jP[nMjJ+ꭺPk6,,,&> -EJMKm^mnm~mKn枋ng@;PKn*)PK-AOEBPS/img/data_objects.gif.GIF89ap  $$$(((,,,000444888<<<@@@HHHLLLPPPUUUYYY]]]aaaeeeiiimmmqqquuuyyy}}},pmH*\ȰÇ02jȱǏ CIɒ L"ˇ+B0p͛8s@/ JѣH*袂*TXJU.TPd`ԫ aT U hWjʝKU˷WA~+@ǐ#KɘpZ3FKcϣS^]c#%+X`=Ԅۼ ͢vCÓPuU"W.܅Գk+ puFmXLAAS0jT7àvG9 B5Qb$Pux}hTFB42$%H" HFG6dT~JdOBy$KX$W&e69`H" ,_NgdUnK &XҩEIey/`*h VfhArfhF:i>jmN()R&飊jz_zZ)^Lš9_'j鰮 +kZ:cR>ϺIirǞڬv#B+:֋/bF4BJ(-f1݊io⑷@KkJ< G,Ln3Gy ʎ, 2(wrFDV?r;s*GHmjқ-]+lɀ@l5zkVޛau3p bK#tqOy<.mg.xk'N5Ϡ.z` X8H~ߦw[:]u٪N﩮7GBoR_>;@B'4}v#|=>l3=lL~]㗯?]k?|\gqw#Q90-2f/!54 LJCh(}\H,x ڰ(#@ ! ` ]h p.<%94 zC !MtP. $r xEq> Gp HEvH G>v@MRE<.jq$(@ʥzL! ɍ(hNѴjEF]FTIjQNbաLJ֨+BQWx68͚ffE:z҈V/myלBs5JPW'rU1|`:Hfu22SgVVSDjACKҜNִ;5J Άo]WW3%0 .Ukxtgx:I.-{9z*@okeoB`мtc 4pk dåvm8 m^Tk3d\TphqH<\L & g4@zr㺌qgi#67Աv&;%!@l ,XβqB S`N @0-L6{jLA涔π,# Ј.ѝD; b@ J[Z;/NfiGMHz .WmLRάjzָuQNMTv `ص.ȭlc.@ZA5v  Dt%>vMn\^nOMoDϻ9?Np.#NqN3q'n CNr(Sr歼0/cNsuͼ8ss@oσN E*mPײE.0FLwzԷu& " C#]O@ 5LDl*XB ݯwwQ,ذ`AT`X@A^/`uMPTs`NDӁ ྐྵ(pYSD&f̓AL>5/|.u~Z(`!^!,4HG(7(96X]G.R8GCh!]MEKIK\YXYdO %KCMW'u`xWE^}sZ(-/L~BdȇV93S䀇XcT'4%8Uhh:0KQ4`49x#5ȣ;27C3X6kIH6:H6s#,vTe+==Hp-aS:-w48~#+xHf5B2SJs1ӌPs)0.~ᐱ؋IG/S4{jEՈcVi2j(F'I7h>;:l4-ȋWbc2s28.gC5a/2HTyi3WY3MӍQ3.rVO2 .!cV蕺RI18J<{ұ7oaY)b*y4]6&K>Ys /a~kƲM ؘ}9ir hx+:fU q +HcY@י#(ZXII9# {H!,HW‰:Ψ7bhݨQ:M<*yu08 ;7oSu;“ӜAY3cUÚIIh@1!/Aa!:", 3$ a''sja02JA U#=!8Q: .3"qF?9z$Ѥ"X_s&jol?%'AFaH`qtJ u7mCT v:pZ֧z^h0'fP4 ڪ0fv$6Ap1~W$P36ׇCfji:XjeJD竩Jy:VC +˄RUOi aeJ=H "1U:#:,s%/VÆiLમ1QJsNIśqZBֺJS$eJJ! '{1/kZ k3JT1TuZ3*.*!{ BJxJZ ;NL9ɵL݊|SO:K @*?;[uKfEYDP4Q`KG;Z#pb+7t WutZGO =1q$%{[O%:"q(WTrXrkUXTX O%YKѷK5Zչ%Hw2X)ky Q{9Vva XӔ|x{X;d[Ry [˾KYNJRiZ[Ge˹ ak˾4'j[n{XuښgV{Y#SZÐ ۺNqL͊*L8M.509<]_'`g_6" i5]mKݱ5pV}[~PuaD}^4|tfEӟV x䫂d3)š]c0kawp}G5P` բA`p  t)aْ=ٔ]ٖ}ٜ٘ٚ 5Ơt٦}ڨڪaPbGe7d}۸M۽-mU=Y}ȝʽu]}؝ڽ3=e}}H.]$m Csa NGl] .o a.. ^.a60 ^tq&j;0n".$6(176mIDn2B -]NRΜ=VQ~ZY^~]b.a>_^fhWl>nO xz -FA#c@芾=~u'M!Sa^;Ԓ~9EIl|\馞N4Ѷ6N1еҹ. Zᙍo1].A̎U@ZKٮ??وzQ[*;^c]I8١cTyͮ( ,键x@2瘒I>⒚>[ȖI˘jЎ2#N\H߈=:q,VXZ\^`a_fh}CEy3 ~߹B7P !`_?fnhӟqM;j&,Wp"3?_+ o2 ??/PHRI܏p*)P#F@ ɟn01Ѡ  DhP pQD-^Ę1B=~RH%hbJ-]SL5męSN#(hRPE5TRM;RSԕtZ創֝\~iaDHN͞]ZZmJtܛ^kڅ^|ҭjF,pbƍlp,/e8\X4УM-gZ}ڥ\]㕍n^c׮Zwe,oW-2@3xC]_.}ztՇ^XxnAh`-S7r=m~_/=`02Z /< 7\ܫ?S=M$?RDQ>VbBp/#}K,4၏Xp=!쳺5S,QI-U:sX(PBo!tQRF+!RKJyd@SX G56?Q>tO%n35Wuoݕd-/aC R7@5ɜHH`NYpjT8U<UB7m#.X7c j|KK*u}=6Q5̔4x\o wg>ϭ܊{։lh mmnɫ}]>#:04!~B.ޫl)`Mڗ ~P@ 6%pp&N'/D eD xd (o*=OwH_# ٰ).@D*D,bn-Ƌ"bl8'Z2odc 5R$bK0c CrżlJSʍm@UD^<ٳёDnIKz0{H4I Jp@e*UJVҕe,e9KZֲp :@CAYp!@1I8Id01#Rhnvӛg89NrӜDg:Y _$5fHPi7L2B3^&5zp''h;u Y~Ztd'/ȊNTT$A:H'E)П uFht4HؼI0R47Ȩp'0Q:VĨT*M)@ҳS|POŨ[ɛ`!k`z|]_|2X6("X.lfـoUP5;ZfhU{, ml2 ֶA.+[VHm<E.oG& ׹M2ؙ\Ɩ Cɬ xauKaޝ H@X;_(׿p<`Fp&nB;PKrePK-AOEBPS/img/text_transform.gif GIF89a777III[[[mmm3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!,H*\ȰÇ#JHŋ3jȱǏIɓ(S\ɲ˗0cʜIGrɳϟ@ JѣH*]ELJJիUEV ׯ`Ê@"ԱhӪ]VClʝKhYp7݄y L߃ M\]FV ɔubY=A'-rA҄Q{&JZue{Y5&7\wn޹#.x}w~P;j{?>ߝNN~Xs`H݈PIzsY|EI℈eXJf}!ʨ>ʗbfJץvX~*TZ،vqmQ*J`▞ڨtʙBک{_q%'[*^Qn h Hzb(+%aK.R.ʶhi(|ץ)w߾Zmi x/{'Zlq OZoC 2Zn(k{o)r"G3;O EV2F۬)ZȲ L4ъ,,C_,\-V?m'lMmd-t6|?^})݈-7>xWԑg+Ho砇.褿騧N䪷밷^n].ğ~'5GWoQo}eڋo쿥~ǿ:b~>= R>u,9W:0v |7 / G0>Ń `G(;x'LMTBp,|! S(6!s>a( <"%* 4xaB 6tp`)VxcF9BdH4yeJ+YtfL3iִysdxhPC5ziRK6uZ2NSVzk֫PIlXckYkٶUѢTsֵkǻ{ aZf .pă^/dH%#n,rC7u@G&4j̇~>ڳ\M͓\ҳqZܧg;-rѩ/}[vsub}㿏 }z.u>y~OO!؄JL9ϿKp A㓐ISA4|*[ ;B \pSDETP 3|QmP!C co1\D ct"A; LR [I%?rL.]ܱL&c+&kOɛ10ó'i4LrK鞄SR8kQ Ol64,F ӹ35E SUUrVZuTi;l^]}X,dVXe}6Q,f]:Tn_E[Ym+%psQc֭|XYa=/=y6Zh&ךQ*v7iXicZk>ku79ke.j.mE[m{QƲl|fUfj>hzp~5ޘp"w2y~ey{>zߚp35[ޘ4d_μs%r;Wܾ#" L5>{\/>1/ }~䟟sڟ X@b$ ;PK PK-AOEBPS/img/apply_settings.gif"GIF89a::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8'ɳϟ@ JѣH*]ʴS9JJU=jZ3+ׯ`Ê[1ٳhEM˶۷.KWܺx+.߿lLpTkECܕ˘JYΠC tHeU װѺ>ybͻbkE xG㾓+` ޅ`@ON/չs}g~}x EO,/ߤ]}'`v h_BȠyE~-H *߈$j$D2""y,~jHc1"X#H%i$nUїKG #Eɣ|U WIgJDi*zƥ2a+v&A^>ʹc{9g hZ$ Qg٨vY閘b"ڐO* |)ɏJ!zx'*꯱hq6I!96JlQ +19^襴#JmgiqÖKVߦK6fZ*.h uool| p`= aIҘ:fơYLWy쟾(~f˙ |h$G>2l,sezm}mGyl{E;fF畳8`A&TaC!F81f"9Qȏ$-viŕ+Q,9eJqD8RgO?:hQGDJ'cB=9)͙2mJjʮZ=2vlYgѦUŶD~j\!~Jk߽6TpaÇ'V-ե\]N+ٲƎ~=tiӧsF}ܸ=[82׷Uwo߿Ax͚}c[5^/VtaBzzuױ'͞UW♛/x͵/? ]vWo}=r?~u=rkάlP,#p!=P S0PIܭ YOali8 mQF uy4*HHp/lH̠R)+R-J' #Z,3Q5l54B0-9$;s'8L?$SA Т-Gm|(435!TPH9tCIT-M1 mR=MU@EQ_TUinN]]_O?YS4 VeyR۔QPM(jV[K u7AH*\ȰÇ#JHņ2"B ($ Ti2˗0cʜI͛8syO4 sOF\ʴӧPJJdҕ1bũ%̮DKٳh T:᪝Kݻx^d[oT\LÈk icKL庋9hˠCMgȧۦFװc[nz[ڦqͻosۖymȓ+_xs瞇3μ֩՞Ë;E;5OyٗoCOC1 hSݗ`E'݁F(azNW! ~v(^T(bB&'bt)("؊ 4cljWNn)@%ꨤjꩨꪬJjyꬴj뭸C8p`&TaC!F8bE1fԸArI0EGTeK/a.h2fM7qԙ%ƒ;hQG&}H4"SOFЏQN:kW_l lYIB̊гou\wZӵK dWZEs]L*(fW֬;1s>z߰ff8Coz[rLl0e'gXUhŇ_zywDo;)οì6PZ@/|@䋯C>0(>Q<,0C gD19m:;A[$qκHx*dOI&@)L1LM+CƜL0I"l';2W,2;SQ2KG2R$KF2SO34O\S%t8,uUo%˓M+ =BQ<-4$JE4L=| ԹҏS 1uNNUU(5 *͞E"Mt)ӦNBѨVbͪu+׫Uu~*v,ٲfϢڴn+wǶ2ͫw/߾ZΜw0†0ƎC~Ȗ/cL2KΚ?-ڨ❞GNzu)]-{l'mέ{7d%}.|\#O|9VuK3.}:WSϮ}k9s/~D͓O~=ÏOԐo~y ZVC "ؠ1PRX!\.ԡ#X'+آ/ab1X7☣;HW_YG"K2٤OBSRYWbe?eycYgkfYn~yױYw♧gi@$XA$dC%NXE5nD$YI)UdK1eΤYM?ԨOA%ZϞ8.eSQDjhU^Of8VT#C\K-ɷ/㦥rn]fɊcX~&HX0Qex㒐#)٩eg>4q羀ASyN5o:\yNI5es7D…N|o=*s!s˿B'>x犋K ru٫W}nm?Up}W;!㷏W{+0@ ?ܓ ԯJ$,SII+r$S*0-K#MTP-7Wi?qUM!>P8QVChåJKF?-QKTM! tQ(?5SlUSHUuq^c1aoN]$^Vd9B-M6So]p_[gJ1tH bk/%sZ Ls Y]~Wy\З_n3xYsڎ۞+vԇC}Z9XbQ?Dwݫ8d|#` h=+ d`uFPK@ f`=Xj$a CAP+LB6\"v*-KXe,S1la xA0Y!Gh'wMB 7X Ma$Y""B,S[+ZT}hǜ@"ҸWOzs3O=9+rk?%JrJ$iRw&*Y)qm%P"]rϤ()zQ-}?c-sVi/mEʝ)3Ox69giO}ZSDu\Ўn3 U)* KΩYiT#U5MjHQկ^D:#̘ WwnSt5Y*ǦfbJňњ(u,DIJS4%ٳu#ZLgW5ֶ*; ڢ򕶳MRNڡIX=R%9f&gܱj*GGJ\VuiO]VtH%>_{6Ri?۽ƗULzsN:3M&T\l5 \UZSZK* 7nLZҨSVHŽOf {m#ͻϺj:7e߶|[^:purc/ݵËOiϣ_/~~Ͽy˩hmz߂ 6 f 蚄Vh͆܃v!b$hb!,_'4ȝ`Q<ȕt6ӐDiH&L6PF)MiXf\vye`)dihlp;PK),gPK-AOEBPS/img/test_metrics.gifwGIF89a{III[[[mmm3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!,{H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIf8sɳϟ@ JѣH*] ԦӧPJsիQbʵ׬'ٳhӪv۷KMvw߿/ LXˆ>1WƎ#K& ye/k\33+=MhAzNpW ag]y]fH[gqb<>D}1Зbd}gO< bx4g[\u8 d*X7(%kzVz UA(]~% (ubz!F!fj鬤źs>FJ_y(XǩfV,d+Ҵv+JDNU^u.VѺPћ o_0lMҹZfZV0pOKb a$[u1U/nwAr~db'l3olx1v2A_5߬t˜^@v6R\ǔ}3 ugc-3ȹu@$XA .dC%* 0E Tѣǎl 9IIȲ%GUfY"G9uOA9hĘ1_\iS]&dɣYWaŎEȕV*ՊmՙmNelWw/޿CJuiTĄVeq:!G\忓1oYsgСE~i?MfڵկeϦHm܂cMzpo^|nɕϥOuֱo[{w Ԇ'_ot W޽ѵϧ_}pܾ#TpA#p;',m$ 3и 7@C2F#STWl Ec]qFs+ QG H$%tI=)SJ,Kr#'R=3T34GlsM8e|39MD;,>=sLPBMQ ,h „ 2l!Ĉ'R0Ō7r숱#Ȑ"G,i$ʔ*W%̘_ʬi&Μ:wI'P?-j(ҤJ]aӧRRjXj+ذb5vkٴjײ}ηpҭkܻ0/`|L0W +1TKH2̚A^ 3Т9ٹ4ԒO5Ѭ_ώmڪu+o/tlʗE.9YB]}:!o;x36׳o=ӯo>O? 8 x 'glTl9εMZ`mnh+!mUH]"]bl/"Fcu]c>c>dmEdFd1]MG/}dY.)LRf$TWBUDffi_*&mzudADZF N(Р%i蠄|&ڨ]>JE)i!6j)hY-Zirg8^)vh+jШN*ꪷ+n:lJʬ@XРAp!Æ%‰+:"ƍ Cʼn'E,G,WF8_ΔS#Ō@I$&}ˁ-Щ՘6F9RgUPjJזiy|hжBsV3ևOnOq-JaP%,Y&cn5cg-륌12E]uc16t@#n7g$-F8x +}rk6==۱ӳNlc2[F=LȋlOߴgm)-ϼ4[5ݮL-6{m8; ,B*n)$lK=,d0 ]wTe\~QfxctΎCydyKVyVeacey㹨Df{>yy:MvsFZfk^i݈j~穭\>Yjn9l6l9mvgߖ{n_^޺{ozo7:k 7nW|>q#:q+n/|s)?{b/Ut(%q q&]MvXskWQc'}_ܣ^>}_=wo8| fއ>|S>^7xyEXz]O nߏW_ikĚIg{o,F&8$=[s)ֿ\Ԡ׳nOn W"+2 ;(Bă! eB9Pk47Oq}Idlx$:`+ l@|7>$^ y!xA1! DwytGC<汇`(GtKStcä¿/̓=RKb!?r$"s= mO"AGJ˓b4%IHre1a&W5E"B"kW`a+7( p!g]NѴYJ)3e$;M&2Re$m;FM烒7Ө) g<9gn&GK0&s4KC`+DP($)I2sؔ`9YŒ:~\b;w_BJqXQa{d|*Sٴ\k%MO Qu\UJYNW(cUJ},zֱkeEc8P;˥\JGb{\]W laV@Kl&VVf= V3lhFZv֎emNd, „ 2l!Ĉ'Rh"ƌ7^,#Ȑ"Gr,i$ʔ*WL9%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRjg@;PKrhH|wPK-AOEBPS/img/model_details.gifZxGIF89aB  $$$(((,,,000444888<<<@@@DDDHHHLLLPPPUUUYYY]]]aaaeeeiiimmmqqquuuyyy}}},BuH*\Ȱ#,@`ŋ3jȱǏ CIɓ(S\ɲ˗0c|)&n8ɳϟ@ Jѣ s@1JJիXjʵW9Z_Ӫ]˶MkKݻxݫp 3 L. r +^̸ǐp"˘u܀0"ϠC=S*a\M3sv ‹g\SޓRm ȁ{fQj`yǫSP]b&N"叄JhwxQ)Ag& ihyb&yXYij*BTg\Z蘟}fBpP^;z#Jz~$Ega0NorPBȊ؞*fhڡfJ/K#; {]{)ekbó@P P\{%L9`zɻY\C ,l,Xʰ&sm.

YfB yHT!p4H2=*,x _ ߢ2f&AB %;i 1@oQzfȘć< ¢ F >bD(@lbCI0UEtRƄP!(@!-Zzc((dcAθ @q8nyGDꀏ qqA1Q"%bš4T8R>Q)X@GkJ|%)eHҖ%DasJE1ʠ܀Y4D˪R\ 0iz=#@Lcfs!67X`,0Ϲp@d>sӡ+פ#=2 @)>5!5(Dgюz HGJҒeí0p6@P#NuDddU@-pԥTj/- Tt:ߔ,۔190 r+\M1bbp~`+u\AV{Ů'dJYѪVl2+}*ŲM&EDivG}+[.5j)YZqx)VIEm]r"]LZv UuKSBi5¼4`WW sy^=*׷-pC܁:M.e]YwAv3],;.[aV" "'6 x@lH1_V*_=Y.pZdXu<3W;(7kc(5c\>,BFx?x"rX-r/@!k. 8KFWȅ9X}W5ٴ,,|-"XBFhID),.h# 0wGg.H~qw$e~AH+g|,|K8x,x:1p;ƊX†_,(ʸ؅k5'cx%%;1wpRx8WTs5C ayzA}Ō2(lÎ1gzx:28QƐy1t @:-6pB1I^&x),lpt=m@3?Qɉ  5FBXӔȔ]9!ABg'krYI\uI1YK%CϷDCDB76tXq{yo/C$4BҖԙ@EBnA:ܣ=aAv^~EN.{FGIɘ?myKcQHCсn4)Jw!IVɚ!CIk/EZIȜěIYtƉ~jA)kəq s!SHYi5J~tYHZ)霚Z$)m q'V)y994QH*"g{dI7:H=8)+RjGZA]3JQ4K9GQ.l*LڠUӥ[z*Z*z`zUFtv(Ң]6DeD^*RZovk*rmMݴF dhjڨz5TuMdEA54דmcO$EyJZtjPQ:_Y5QQ Ptdb:2UKFѬ*/8cGJJVZCU Jl muvdUMDqV㑭W6DA˯*CY!zX$R[n+6Aѱux1䔱!Z;," (;*M9KųwXر]s[D1Ǫךz8ղ@0{ :J]6au`E .jik?4KW :M&=QU붛c<8gG qa /{#@!Qdl !m+ %Oqw]#&Lqu`+k8/&i۴1ec_sT+6"8z;kGO}3J=3 pc;f1@6 7"G=11 L Q340> &K9@<@Jo5B;kT;0`:!O>JS?+O :L{1wonj@Aښ<%"9*IH7jw2(\;D811nkymzCw>zQqJ<–3* 9RCm+,)|bHmb8d| -{gȣ{86tC$Ar/$/Kx!L=Adǁ'ȈDXȇ癋,2ʗ5y*:{, Wxh~l}D2~|-y Qôl*XH,~Ԝh~? 1Įagg|*kH-,8nLQ߇7mmF1lE<9oA>9NL^>C:oS%g Ê\ԅo9^dZ۔ݿw.y΂VvntimAi7{m aNHIHtlXwn^ʷn<~I>뀞ꙆBҙLTRgޙ9̉N=](}~|ܶD~mq ؜ Y~ ^>[dA=J~$,)/#Oɡ}Е. ڀ2ߞ7워vF\AL;4_橙_ډ<!o#j,>^*rʡb <^L:6 ,egT;oJLрŽ~>!ؔ?'JA/"|Zoǥ `].r C@ DPB >QD )&b01QŌ=~RȁZ4IRJ%hSL KhИR 5j4( 1 xRHu|T |NŚ 9rÁWeKVҳٶ`Tt8 }pc݇+X1V7m y䟄 = c0Yu!{l6j-]6sh'nr&x9[t ޞ:hHxx5P`0AG?o|5Rp#uoS(0dA0B 'B /0C iаDOD1EWd <?d$Fw*GFr1:H% )I&R.'J-8.J3,L5L6$3H).L;2Ο䳦=4PCU+P QEY*4G'KRJ tTL/m28:KCoӖL%5;OqKUWu9#5VAahT[wIW^iCu`M(R\EcqXee5ZkZ VmAoEE-h5ݙuֻexE)[|Ew~ER_^ ΌE {!#FJaЃ8cW;&8CFd5-=ye7Y^^5!Vygp^uI>`i:jj:k :Z -ʢi** n;ooycO {h[w\%{y"(;zy!|秿~SxmCjЀπD`O@o!X{!9h q0v['BrA VֲBF0u6$GCt><{H(!,L _h0`4C:!J1tV?(;-ӝ5މ%A5*h~,vxE:Y<;q{l#!٘G<1old.B"HFb0! =Jҏ~<)%YHF2le!sXJWrc*yKW-e;lk& Eτf49MjV3>`/ڒ4*9_S\'8mINw3ﬣ/_3i# @? Z03ۄ ,|pdP9KvrmPL>fAgIU v+P)!(Bwd fpE ӞTk?o{ѻF-_8&ͽo97-֤CpQ'e/çGI!]ڲ4BrvwQ.uq?}omnxXÎqu#꒗ݽ\7p{^Vv?{޹gp QW>r[?~x{˞xnwnXb2 ͋K) /=UJQ{A+5auG&51>S5g//N !)AR8nj/fVy'UgX_5}{<8W c,9@c52S953dQ5 ?Ϋ@ɻ߫YFZ$?:9C )?3#=4p=Y A#%$>&򫻖$C)B>+s  Z* sA AB)ĻBEAB0$%., @ S46@7>@#:>+%<.,4#*$B;UBKrijD#/8$bP@BD RC2EA*DF/EtE{E963DA -K܈Ő;"IL,IɦtJԑx@3DJCc=HJɧTKI3#KKɹKQľ̙TX,#I0Jˆ{8S3 9LS3@4;9I˾ht6`X˻̞˔ˮJMǴ ; dPca 4U[ i&[܊ı:;<#a5_k_@|K<ݗS  vb(ʌuԺl=Sc44$[3R]]@)V?><F>TdGGVb&޼dS@&> V 5 H+] ֏(b7!bdW`X~JK5Le8Ka 0QR_CN)V  T" & `fe4vd+eFfEh>g7I:{^b e@$rБgc > `6fP:ag]t n.Y0݊f! 6ݲ[wn^hmٓ f 6֭!JiM^5H2N N. O,M_;޻5%A߂.;]~L 5Of^Ѭ`E;N6lxJYg[g7_ϕd n&gg[̃[L\뼍һj~N7 d^ބE[4b1g@Ď.W~o%fk^^>f<Ǧ7xKD?]&>l>sV@k$F;nnwmV$̴S:% ,Q෾3O 1ϙ _ rNS/BoStOSVSW'kSX_u'&wqvkRT2NuD׸ILME^H_I?OֈMgCrpo QncŊ@uvU7uvvM!]\Oh?[/ o^j@*{u=Uw|G?<vH/Km,P!W sOdoe_l_xyіOlWt77T֖l4ȍ7&(bO@gC7R쎐SoRu }XoJwuwr?8vHpvTECyo=jOIy'ʵtvJKĈp-t,h „ 2l!Ĉ'Rhb b#Ȑ" p0G T%A0alYJ+cܩCϜAiIOJ+#Oƀ@EZr5b 48j,Z6 zOHE&OD{.]{}C@aQwLaA&Sl2̚7s3ТG.m24`R/`|SPn޼3w+7a QXP~ps-Fn:ڷsluNѶ`|mVnp;yL? 8 ـ@V. Vt` Zx!q0B! mhބ!x")+:؟T1x#9&:aFb?y$I>J: %WUZyeh!]u!Heyy%HmԂ)HuyV-0 x9 @Ey(Jd pB 5( -qH礝z #@z***:+*`U 駽+zū{,D:,g2-Z{b-zK;.i[.骻B.n뮼{/ީ <|0 h ; C<13&kRs1!G%\2'r)235;9.;3==4 ]4I{M;(OK=5QS}5OZ5]縵a}"c}6e6S6qgu}wSy78C4+n;^xKw[^wkQ `0*衋>:饛~:ꩫ:뭻:챛^~;;{0Y@ *<;Wސ> 7_  Wk,>h/?zX80!1p+"8@Ws>x# Id o⡊i@J"\L˜f Q6ˆ"ă9DQIe>9LR%0?!Q(BъC"{UDaqF&^'OD7q3aX<1.lbdSP/!Ò91!k ?&\$#uAfH$HA*ЏRH9N#z t /SFR^T%"J^^Ƭ$+hIy K^є,/9LIdPekϼP3GE֑մ6b5{ /sB4dp9/5fMV2~OO2:&x:RHA6 &Dj:HJRu̘LizR4)z@s զDQςԨ(P?qU{N}T.YmHj׻.\X16!E~,WrKu}j:6 F_| Sڳb2%_ rאԘa Y*;ӋPUPezٌ7 ,hH,6eM pqUA*6 ^+ۉv!7z$b֡M.pc"8ƵXsm$]Ņa]ʢ=JmF]WqJyZUD/b&|}ثhH6܅{7F)Ꮡ-`׻Mq]g,d2L ,cDsǽq|Bkn૸ P­@W+$8k_VQYsxe@I[N$`8#KOCJҝ|@|V #:q9,`CzR3]-y~9@`+SU. `5] Y:t5TΝN gx>6< `V6iS[yƫh XS2 [;vydyginB ]vV+AoWNMYrM@~2] N1pH`-I-$kNV | \3?SSq}}/ NHoSG1rBfWjE @y)W P 0i2@}x]?eOx`Z\]U P~_euRL@e@UiՋQ>-KJDGKJ9 :N >D G J *  6:GvK.DF*JbI֝,!H߀s Yᓈh`,-".. xlZE0"@p2&2.#363>#4F4.# L5^#6f6n#2z@$@*aX"!mLt ؀=#>>#??#@@$AA@@y+"F5[Y0A@x@ G~$HH$I" P@4I<4IN倖`E~D , N$OOd 4"*KU( cx 4 TN%UVO@$e\ bk` 4 X%ZZ?@tEQ9HRf CETDT]EQXT@ %dbbccNccdd bV>bfH^@E>E\ވ)Y]Ve[ `d ,[Rbf:Ujdm&Oh~pfmlhVHiviTf[& 6%F6 mcvvfUdcwOz@lgH=) z\}HqSS|* p&e8Q6}&G fb0L H=&fcd^cZhfb(wRehdf(Ҧzhxh>h^r狪wnhG'qNJD<C'=S;<5i2Ň} iS<%CS7ML)е ;|$h(()(f(樌橛Ʃfj"d#Qq2'_’#eR.ԔS6UҗV/ɑB]).S7sfzt*F<@ x)ni©i&j*&)nVf'GJVxS*M6YRrzB*0 /8Mz+)WWRE j~z'o+:k)\ℭʨ+HD&)7i+nvӗ*Ӓz*5맺Һ8};,Jd,jZ0Lw2+>l*:*m*.k *BXk*T6"i関.R&0hצע Tr ,VĄi+F"-*"A)6(:,932D7t sG33vuƑY~g~3uIS3L>+g?37BA?s#t-KNJM_2:g0EcEwzCAq Eu})'~Ug*v-!p;2@5B@47[?t4&α$uE{JI`ւ_k눥XEX(AG4h57 \ Ħ6S 4* !TS(CuQJ_6``+Wcȶ2E @T&2eA5f3]uB/~6:rrTvDrw6gF#YJ+b &FOEoODe6wMOhB7]rh3@rhsv~du#˘*G{X-(JpIa56HkXWdt8kh5@B_6C?t} P8K/jvvuVvJSw:5w84ﶉ@vt8@C63#re8g+4q[5xp p"5^ɺH_#bv]6qFׇyS9a8>GGMD{ODԣ[ &d%[VHdO:ÙryD@dz8W5Hw=K <@G1 ,PfuX]И/qKD \/k$S1۳X3El:w;ߪkԀ49@ ܫϻ0j8@M {ǔ $@7'U<;@ЮM{P*ZУoJ 羀>D ~,?K}G8@G;oً?|?F/?a~?ƿ_ '?G$?@8`A&TaC!F8q!1fԸcGA9dI#!82J/aƔ9sE7q9rF:hQG&UiSOF}Z)\AQ];lYVSعZo᾽#Zջo_cdys8 w>:B ^x`vuPѧXVۀpQ %m~ !L7 H BP I  {a'`Qt)(PatkZ$ % ґѥ( jIH$I1ɕjP@ _Q˛l@ʸR'{THL&|Dr@@:L\LIJ-)ψ(N ̆|/q@3BLLHGA7̲Oq3GTCK-T&TMmU\V)YMV_1_UA^o r_Juf30"HPU\ueUcsO@}U9M`MAv⩁NZ-j|fk r4Y f煭筽u5ng{`?N"מwkmmhyj1/[kr;5Y32S4qIG?ws;;=Qmtq\"qř%Yg;ܥ>n޻mAZD7b9w[rctgAO "kPTQ@ZQ E5(|( ӡQNGi9HFm7[( q{^4H9BjΝAjQZ2@n̑MϛuhUW̅#0ڗ;pϲ/+"- `miOڝ.AFγz#)% 8܌t8+=L uH}J n ~6^}=@9Pf w4 #{8Nv""q4@lO:!xcy<=Ёy@~G|sJԀ|yP`Lͦ[}Tw=e{ٿ^Hǽm?uG鷯c~}|08>Mӟ~:#FvO{6f W~~S_Ͽ/ܩl,F8H #P4 0D֏CAOpZOl H;0P8r`B<> z6PN!>otsW QP O{ T 0 l.~F@p'n08`:"70:Ib0 kP a 0Ep[P0)R8L,P1UqYQ, P$bT,Zb}1%CXo ېo 0oiPS?qͬ/HcɱA#VD`1$@0! 1 -O  q , "d `d[ /P =qq%K2 !2C&Q("uE,"ǜu*_@NR'o'rCr@TBO@TgՐf(rڒ*E-'+ht4?t:*Q+-+Rڼ,'t (?*/30l.0)-*ҨR(R0!32m0 2C,,t-=DR2Es42-4 R8R OB4es6?4Q6kB1C7u11m..Cpb2Ӝ(m73.833R=3Tbힳ98+9sܮ(:s'Zs V65!;sS=Sȳ=9!lA .>3Bi7wSԃBd(3: CC@OP@C S4.U TBe%;s` 37t839EI2~=ϐE0!k|btF$>/;T?wDt$4@_/!?SAYs Q&s)4NaC+4=4CA%C{MH4DKHKLIEIttT4RW M{Jq6H 4VIQG[_9UQT$A5`?]Κ*L5EEeZ=U^K_ 3c`S3qr6Q6eٌWAe7Bd`c2@emfleyvT?d9r`g6eI {vi}VA9^8h4a`fi `V89Jvl#3vvkѶ ֞ T6l*e3mVm6TJpnR`0oW69^ 2Twr$1qvqoe @rI7\ Vssaq#R`vq7wuwwyw}w7xwxxxT`uu!szz?yW5.{WA5`7||Ab|;Jzѷ}ݷ5W5}~"~b~wNJ}7X$-w8| x89{!v٢-x7WK98؃uEs„Q>@exi8,,(P kAL$) `j"w؅G7 @>{x/:c4R,(@72>` ㊫8[ 58FV*6qS$`3y5h ߘCB@y9bX|Cr<}#3")}+A$KW)o= 4“ qC7׍7WnQY@vLEPxP!4%s"ce$p| pBdSb9ANlYinBguߢYm7y&cf$RJ9'V3$ٗٛ&ޙDv ^L gjE\L>i[Imxh_-" "]ڸˠqLv o':#2Ճp9jaAbx}ǯI!f@ 1 tj2hf" hvFzz侙!I^ާz{zh(^ȅG0j4F}cHv{{ Z8B`_v"vzFT)(B>rjwbs{HHbLx| (Y["TXىtb(1glhnbfzzMV;h 5%fh:HۘH(+H;(ڿG wh1ڒ:V3; hvhMHjJG1F!m@s⺼%ΛUƉڥ_ M7< 9zI|&!dM=㢸YXՑ[{Wxy}'|W}sum؄ǣDW P*f6KY}1]½V#]osǭ =}:P.lRJߙ[g]s-ʍmĝJI}}&ٞj m}K ]ݼJ?!,-B$$~c7{ ּt<#]Irv>L&ng޵u (m޴ :KŸ;!:d~>F =.뭡Y^">$*N^˜ ~^;Fʞ:ZѲ?ւxMG ┻I?@;blP. kJ)-j k-S|x_q+y_3b_?^_yUK?.^[PRegu$X… 6X0Á#RDx`†9vqcƃ$K<ɕ(,| $G 'ĘȚ4kԩ"Ë@CXfGJ2H&ӘTW5֭\z 6رd˚YٙQl*Хr[WGN s[: ZmIqF,i_{n{qIǪ[~ ;ٴ*fC-- <ᇒ ,Xo^fRU]%HoEQMH)l5P!(_h ``2WDԚ݈c: cBU p@ TL>IPNIeVZnZv]ǥI0IK^fjڭ g:d镍k(gtg~~u5I-HVhCN @i aJZjT jVPpjX6@0%+ ,~9X WV0l²^mY1@fk  A  `KoU3@ @o pLpp /p + %,ڽpoq0HP;PKt2\ZZPK-AOEBPS/img/execute_tasks.gif:RŭGIF89aC  $$$(((,,,000444888<<<@@@DDDHHHLLLPPPUUUYYY]]]aaaeeeiiimmmqqquuuyyy}}},CsHc@Ç#JHŋ3j8E Chc(S\ɲe-f 8sYG@ JѣH*]E P@իXjʵׯ`Æ%n(1AʝKݻT%8H`L(. (kÈsPV@ JL˘x@ CMӨS^ͺkҁLFTͻA`ߢ)PA#УQBkν{ RHOsozC ?}"$Ͽyj*l>7z[FjH mkޒ-p@+/w3vʙ/҉'oJK's_"A+Np*{,wFqp50`A>+1*0,ʰܯ-1pәlȡ)]#\ M)W  tC6pd`mv[/oXP"PMYc]vbsvww~/  @K= pZ{[^9*|~lj `Y x8K駏⌷맍pA|sBߍoGWr!=~8tc?ksp ]y[؂)m糤a~9l|Zz 6(M7A靊S󮷾43HJ0[a +>0A^ΆMB⎉{ai*v0 sWU<$C Ӣ>:! ' `fђ3quc[b d>VLe l)DE7RlhX5҄X$fI J2n4)Ԡ ''AQRyL)=A.:"4F}_&.ГNēǼ^2߷5ӑ_%&GM߸3̛d4!g:&gY&46<A PS?V((EEQDhHAЈtMFhTGR4%=NR4-}O栦DM rӦJiPUU)SUA5,=^' V^5eVV|5 *\ʄu8f[JǀBf*4%\sXVSaX?5cU%MmZJZ-f!٬m(k[ լdmZwnvC_h3:)͘ko3֢d h'vR/nes,V {,񖧹ύP .` v_sw3վ'obq+4a򔗱r%>g< ML K2r3~bzMc21hq A\X@2dMk,[ԠX`>}.mSNZfŅSq9nLa;ϓSekN!Mm^k'="b8ʟ}4&hϦhK1Zf8ӭ%j,9gW;:ƇVi)́B@b$~3ܱv%ld>;f] M>=# P6H7]{>.DFee-7N![ݶuY3XS 20oёhǜ6WNp"{?c|;42(؆ᲃx-?s3aA.0ٿU NpYE)BSD(&gޠ'B7) !:A=҇' x|6xHV{2%+Tɤ+^%TR$GH.X@f<7V0\ G:fr$~}|۠.@ld~#* 4)Q#B@~r"%!4@m "D € r80~!AC @C+,}!p34Qp؃105FQ*A.H80 R8, 8(#jk؆Z}AFPnxxVAfQ)7oz^A!|d|87Xp+h(pQ#p-xށrȋX4Ј8HҘQXXr与G8x88pn؏`֎x5y)3 {i I-ME)|1++ yT[[GB`C  u(ٓ!yDI $9`,HR9/`ʲ7`dX1SYQcr%`it,BYw9EiGI8@uYOx}i&I$( aI9$y d"\IGi 9yoٛiwYy#Q"50u9YI0)y &(؅=R)O 'É82  )@yщ˜!Z -R&bYyn9H 'rU#X()(PXY 5*U-@i'@I `JI/{.3+ -uY8:9hjp q{Z.1u][ `5 phڨdQyDʥ2"V70H'"Gugpdp&aK4Kwfzz(aicWJyz}p GY*NCH>$"ד##㺯Gs P$ CB5EMdJf" Gʯ+{J_@KX @qFFY='7Z} .ڥ:GȦ}=|I!Kaı2k'iz*{S,˧EGGf@C~gbK,DOtaTٴCK`{BacD^LMKwC ;:u؆A~vX w;sv<{4P:jkyZ{$\8P){X+OJ=C۳ WK*W#7MkJdziU1-h<)vz[dC6d8Kr|:_ I8[ƒDGN$kPB>σ{K ;*;Uh} Nv;Rkg: ht;˻`EAQ+"{ln?pLDCN,ĺkjte#<¼ +\[|`Ԧ[Ef&l]& U(<*˜.\te9 b;= ĶyFlEsnjkljempV[P@kutE`9vhAvdfcf`<KhƄL%lLn[vfkh"GJWqu]sփhu f\Ȟ#<^+]Tkǫw,7Gwʨ\ɟ|˰23;'m}hWG̯tle@Ujd ool]s*%lc~<x h\7Λ&rnkgp|ϬT|]3]kELռ|< AZsT6slF0f$,tΟ#{}]F]bYH|"kkwyVf 'nxxqDukU|c;}rYeеAzc="A!zk}<5's aSy[=pFscLXx<CӌLLbm`]LLfrLJ\VNymyIԊ `-֮qf]x=Iu䂪-͋kvv>m_zlmܦ0̅UK30ғ{*p:ЈFz}tΫQuȱ%=`(V-ٳlǞ\-agw|L֗ `FP  (pmԼҟB=<m,Cm'{{)`->>i۳~a (9&q]6 -.*PQS7mp-ٹyHJL蓞I(?^$˹Wm^ QZmh'3dV#`i>@Sn]jt~J}&zUVΪ EUz ~xQ>`U]E(9QꮎwWN/!Yl2븾r$$>,ƞʎ -*N Qabg`! 8١*ŮK!_љC~/nG)?#&O?y,~RQ2?0/.%A @Q ~ o$oPYo> /6V91؟/O).!ҳNfnMepo')"LSYC@ DPB >QD-:F=~` EY2JK\ɲ%I"e\M:{ԙ'͂DAETip,UTU V]]{N_YVڰ&ņ}eʶuUޥZX`)(Fa޸y:FkZxƽ]͙-pХMXBjրFܸ2ȝgvIsnk[QX(\?ʛ3[{c^i ͟z ܠtrsso;;С@"d䃋3 //,d+CQ!!DA0HOdPݢdTp8`dpDb^ I Vl1бIJ˅DID*0ŃLS<./N;  1ɬa3t<bJ 49.8ܳLt҇%P7E;ռ#!JC/09W_5VYguu*tPW_;1%] hE6YZA5)U8VYiW) еYm`-U!c%jԥ0ȆlStQ3!ub^M Sw!0@*_"FR|C( b.> ́ ˠ5!z&ٍ8)c? dFĔ:mთc#gldwF!zOfiV`ɩ{fOan:(ܨκ鮀 JÆoo7oC|>|$O1ƃv|+.?pzr*_st8Հ7 I#`w U8@Ѕ hPc)J Їܺb8 B`-X'@@McD!*-`<2ьgDcոF6эoc8G:юwch0j@#ᢿ@xבD.f%@k'ǑU9"l00DU^4lRD3p8XhH(O^ \72`w,1UN/\ KKt&/PR +RtV}$4A]<s ̊s g1@}s ͤgĸ8|fEjDSćA%{v2@ʶQr9nIGOS"#o*Ё^=$] #nKy(A"*@Mi0*DEQR4")%I6u^-eυ'"g^0`P*y1MLX/5T3m!WJqCd Cʓud,y!Vr%e(Kˀs1YrE`y9e>|mYcs *9c s|s{UE,mЄ֙ qt 0zQh'QIFuU}~@@d1Xo!Y:}EjNvNO1'.P 5m/I Y S17R`nl' v7 "@.PHtPx;=TX@\wΠ 5D\U'; ^ȶKyf@ +vb+_ Ѥt|)Y5HϫU``>+''xƻNͻ@#'Cs+1wsT"F~3h(AU>]*e2m&B^ W# ntq_pʹn'uy͇$?:xb7(~vOıV 0#H&?!';3jlo>#f?=o:$|Gh?/}ϣ[#>6F9ųy&ǻܠC>`@<ᩭ`ك?%& QC 993C(:A6l=x?TD)>A'4C5<[?†-‘ SD>AܼSCD O R>ۑ ٍUDsD(k@zE졎*,DI(VRIzJHI(G*H؀8Ję,MWHm|͝aeOb/X;y`s~SQuXZƵPh֩2~Xp귱L:o^L@S8 Xل %3ZP|YzZ7^T ZhMAR/MIZjZhSx*jOYq9`hU%U=>JXؔCY^)Y.uׅ]`uӄJ\YHݒn!zpɤjޣ^1'`=[gjޯR^<%פ}_ݥ[m_^*[%^E*B;]P,--'SM`KC Oj`m7;Y`y݊XZm%R`aiᄕ`ܥ(!>p5u"'(b<ڴNN X`6XEP5]sc(Wx[ p2.:3(7D{c !ks%z `XcVb7@&3v<E.udaPi8Ҍ[P2665u ވX FpmIbU݈,HeK~{˱fUXtfV \i.U=MIuemF]xX`fpHg KT9f>>Pqu>hBXлNzANa~w6fmVbhsi@hXh),{>ƨ W*%Rz IaQe4-fEMꠖVlj|yjoW4@4Ɩ-IU~IBCk@4^.דr^kĝpDFC`@T 'bƣ0֌Bl/PjkFlOΆ\@+DF6(fXmVN7|ClU\l$? tCm?F!LmjCit|tEljBG<\u#udGfUrN1f xshiGv{ bҔ.jODi^_^tP Gcur7dF^w?8vdgg( :wn} RxWp􇞬7x/'bxp3^x>nV_j1(}!vklA y5bB8 bPxw($q]w1c9rLcA:%A8Z$Mfmɨ~di &qʩ&k jsEA hՠ~*Нـ:(Wက p& R 9f @EF%jj^*W**@Ѯn++bقZ^j >_9ܠz[[ T +wA :n_zѻꦖmJ+/ZrIGX0dGo~|74<1~s ppŽ (|9|<36 xB A =4E}4I+4M;!P 4 +@=6e}6i6m ~ !X}7 >8~8+޷)(˫Yk}ck9{9衋>:}K=Xz[>;[W^ʮK;;&k+D;{C7ϼZs=Z_>'~~%տ}돻xCץ 3,vL #f )A9ep`AK#,]@" äB06M >B . !%2>L| 8@$ (E!@$ B(D5n|#XE((x'(@麚x8n@HG9g4 4@.l)BGIz8dWEDJ-Ih@d% oK.O q̔ ,)$KzC8YI# xMi4֌nRpQ&9hzq+TȢV \*/f?#8%$j(q&%߸KB1JC$*@hP`S*70@"Όֈ(H@_ t1in/D" 00$d)("RYFYBg(^IwRMУ?VM"UDu3RRkU&GLWBq*S*WmJJʫo>LB KU+^ ٦0lZWJh3,eV$U  J6,kG+!^Ƴ}LkzV,nrٮַmo)4*ie+ZThrwL*U/2VɝSHHooXGnvQ]KkZ`u&^TJ#7/[d.4ot,e2jdÌY8; +پg>\\Wngٛ Yk1 H1&wq,``IGXk f2׻who"rf/5˕-i=\[_>cU%3SS:@ MMyһ6ݬXm8HZ3_Xkfz:exvh-\|ewz=C}[5*v-7g?NoIΎ8DDGa6߼#EyӜUr6<=(Wmx_,̓q[9y(}gl7F/?#uHO[Sw3D~B'/HZRõßEjgDxd__{iU]y_AߜX1`pqh k` _R  ^p_-t\1D 4 +N}FNKE^oL!t$U>OճGJʋq IJ"JJ`B؀X cKFL 0OnЭLO@)Kh@W;edjj4e a=5 @i+&P%WX@W 0@8XM3QcmZO 8\Ҍ XJU@%FqK_e8R8fn&H#.em@!y%g&jjӔK x@&nNG&o h@n'qqh edLR 5tNg(^%cF(V}bf(kM h 8 @hj4Mxr<@~Np@TE@l"@ibeng  L ,Z΀J0'O &g `@L@@g (piIg UPagפ% %] %jcʅcy 8@# 1vHS(Dl yFn܀Py\]\&ADd`G>jdMZʜNE>M+ Kj`F?ٔUEL갾ҎPY*Oi)ԊBT^7^\VFUxՠCBXUDJD1vSٹ VߺFVv+\S-]ĸEm9"BZ}D>DȎYʺZǾl{i],J[e.meY^(ٟlZ,­]ZnquI-ެn6b/:άUͶ1:/aƒ92ʖD\/Rn۴="m-,gڏl-.۾c-wkpVp pKBɭ^I9J 0{}Ynz@`Ѱ]/OB( qvqot{q1^?(q1ƱP"1C^ qC]!WF pq! !* 9]2MI:JE"i2'g'_)BU/c̡Ù#$BJ"0rp2V/ ^b&{ء /s3$$R0 b6.(J5[-2!ʢ-ΤFED^c4!H=KqoP!;_ @*6.?l03Dt-$27g8GJ>tUdH<3}%ڳrmʩ#**pF{Ժ2& :8z4EEDM`ᆝ6t8nL3)/")B [!=>䣸LD/ޣsR (f$?tDW{uYͬiD[KR+#^AljY9)(^K v{Vj(&V(E[קZS6%c'UtDK`⧡Pŕ'M%vKjQ{ @kDhxn XP uWwє@̍mo(p@fuhycۤXd/wŨ޸\n4@}2*m7]~ctcle؀x Dz;pkw8DF?J5hIU+@47r6}6 B1'8Z9ညŋJ(怌wϾ8A+S9$S vx$yyt 2h듏KùȕI ĖKX_DF[(Z?S9Ayg̴w o@ozJɠD7ϩ#:\9:9IM׆ zzژyLC F@X6ʪIī O@ԺhO{FbB {3) h0@Ut p8qM 8߰p߻~|$lt Mw{ (7WL`SD}]ׇ Co}}=ńC=+hՋQ=C}ۇfG=}/󽚬p|y#%M#O>M &<o{us/猠F `>s>뷾s7Ski~HqԾ P),. ? RZ}o Xt PJ"y*g o}\v2j*%ci;m[ \<@80&TaC!F8bE1N!EFk0dI'Q ")aƔ9 lԹgO??pG:yr)¦3;#K>$nK"`$3 +k@d1FY$qAQG/ 2njNM5/KI7ýW2˽#b~镵[jbu)FWR)"#B &Hd7hֵ}[¥£C2#5Elc씿<喽RJ?xee儘oOj&JvSJxSGL U+|V&mtQ[ST wpe\vsP_Sk Uzf¹Pc_z6Xw'>w}Y~Wٚ7!U=$u h@Oz [RS?N!tH)ؓ&B ȳ#lI -H5c?τ A V70 y8.AP{[ P>%& "D+/UW01jTJR'.Ag !2ƞ Q!E"i=8"oK&uE[GQҫ[b,'f^fuܝ[U (4[css]&9Sa&?j?քmxXjW40+J;BJ婡%%At _0(Il٘ǍB`0ub}I peXH1e@, A/-9%)@$t@PxIP(,x9e)qr1pVIgz&1vr 5a͛ @la6le/u >`P 3Qtyk(`nq6=(Xb@o}pP\[H qO1q!@uA~B#9%79r-? JrϜXTe^s77iytoЇ^WB*1tۀ j.ʨ_]_u;^vnrw=w]wCStPKoq0!yOVGZA_q<``a{^F_$ 3Wfa @,~Bz@7 7@ gX)h7!VSa {s3W $zM0$ ;hO1, º1},,RB6ڊ." (D Pg+xªO~6F)#hP4<sp&HPup<HL'= Cy +m&ƅKvgpjlOY"|܃*Nh\2'&Ķx ujClEtǙir4`CD"v]lOb0Gab"RV fq&QQK|j0I&ZGDmgi;1suEbfec*f%P &BTq~q9G_h8&jr%I%kzFoP _cpkc16gOFF'd6Q"zސ+ }qaf2%X$WS&kw1fd^ QRab=b9R##Ff@cU['L(".+,r2tkqGiqaQb "B~~a)Qa1r"jL"eQqx='.(FFqmlr(K1&$[%"*t?RKE#02,t2B-׎-&Ll)%w:Sztnr"}EŖ3k2=gW q'Ǵr3R S Rd*3N3Χ4.Z|^$HHN"S&3 9u2)SSg$S#=N@@AHAAA&;!$$(,tg04CKbCCjF0 HQtC &D˽|b(htDD%G:C [TG_HJ5t'lTsGG)0KH9HW/`Xdd4ȀT*8usjʜ 2J+xKoPI5IN_sM  ,*J%MnMQBˢʻ 2 xIQyBOOu,< JR4܇Q˜hpkN-VУdJ[$р>?)NqQ]*ETu`U5I54UA Se.> HRotN*d]SEo\"4[o$UӀdU9@ ,[d1 )Z禯Su^u]u[%_KWIQ5cȨ3aeK]kWԬ4L+ UL ;F\O :(|ր0FVT%U+¼5WPiweѢMOfۑNcDO :vl b9Gvjd c/,ȄK\pgOƯTGqNe)p[hr)q)̌Urj@pP1fWD  0̓pwlw=jq"4`?txwy 2p,<@xwR@ׅP {P0@s 0NxJ ڦ fJ@.!8->@~+>hA8Nj`-@UxY >E) ;PKnp5?R:RPK-A#OEBPS/img/oratransformationtask.gif GIF89a3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!,H*\ȰÇ#JHŋ3jȱǏ C>@ɓ(S\ɲ˗0cʜI͛2/ϟ@ JѣH*]ʴӧJMJ իXjiTKٳL6 ۷p"UܻxJݽ /">8Kxp)ܓsi1{,]lK%3eaQNi{9scƚ;9TТK%m:uYլӢn شQή{ܼ9ċ?<̛;=ԡg ܻ{>˛?>>ۿ=`ր` ҂>a9ş^aU~"Cu~Gv)fx-b(c{1wv9ގ'HA>* ],xc򧤒 N.TBSNaZYԐ >٥ne&v9'r &oGgizHfz%t砓6jsiZ飝fbJZN)I*SJ)Gk klNJj:jjX.Kߡ톅v쭝J.К*֎[w"費ɮ܊;**mj{ﺯ :j"k@2Zqw 9rIlr*S. 0L32]z~sqj5o(c oj=9wbe|֩uN7]^ۙs]uŁsmQ-vdo,$_mO7҃ߌq߸}5k3~?}cz@Cyْ97ڝbN#nzOo9 {j?|-{ڜ?f|ȁݼ;HΫn5-F Ǘoe?B'Г 1zF(9 `~+$@ (VACmhܽ@0| 62樣~4 @*:($CdIƠR&idWJeAL`I^x5AjfɥiIPQfq"馞^ywIi.hH)Zi蚓BחfoE蜍R hAzgZ襛*nWB9++2*`Ϊ척F*(;m&떷̆+.aκ[mkV.kaum/G 60FPlpV։pOJb+/ / ,  Q֧1(|o-2 г4dZ8.=s  mD$u1,}  bs\U}fmym dl9wAjnGA3{>KG.S YBBA$P騧: (] |npB.@DRԥG<^MQٱ),+@-ް+__o1lKriIxیڇ< ~׶wCb-H %OyW EAq[D|a-Jh+[Z a86%>)O4%>),cR/@ 6ö0Q`Zĕ BfI8lb4E.x cƸ2`TDc3v@MҢrh;ozdǝR 2I>Cl ,Š ^Z%rHM:1$!GIPsL)[vqRhLK]IBzNq|"Wd]~두\/L4&&)5q༌3(/s16p,dLHV4uu" 5pהbmФw n@`DGhc~_ZK>_wD;X~~ B'BeF~g~*% w  !EanaPu@  s2DX3GAnFxX(9$0fSc#0[@#(pr< ` 3KQC`cф p s(XSzm(g/0#x;t3ȃoщЅ~g2:|h} ;Rp)'3 #0#٨4Hx}N(i)&Wj^&.Hf8+ ȉwpy81'.0XaYBo#$`7 m p W sr;W/#*H.`B,%9~8U #Poy\tYC{Aw 5Qq+fdUבWYi(f#y"yg#^i)Oy-P4@%ٛ$'v) @MeI+LA8MDbP*[$7IrٜFi'(I(y/qr$6LLr(*ɝzfq0b-N0j(B0mb*1AW[2}*/JyR*I2nRD}  y8%'#ʣT,F>H(tSU;Z=j? AZB(9Ghy-.뢡Z0Jb+a9BI:2tʡ*es, 7~7mZeC/zw44Q+e/ur Bcj  nz@Zʪ1:Z0)a*~ R[:-ɝ j5jd>|Z6q)J%j DcDTiʦYEĪ:B8.ҕ{.ZZjڦ!#Cڪʯ{z*4JKK0ʰ|"K"cz?zڱ|*zEtɣ@ڲ.ۮ= 2˥^:H?zSGIvMۯJ!㵀z}[˦]#c˶͊*P)*n+*+t鳢ىt@Y[J^cxk'I'Zɢ;n;I˹>X:Q& Jڢ%/J+bJpZ/ 4KKSQ9{MB-˭QjuW˫;o(P쫮J>m[oU;  \K1 !qgaʻ>L뽨ilQH,|q*  l!hQK(7,.<2v` '0G~2.'P|/R\g2Y<.\ h+4g,.i0l*kHE\lHIBڹ_n1R;1Oä#H>q>Jv4KRz,ȅ[ql <ȁxphO@,FAz|m`Y} = Ɏڊ3C-MOFmV( -MtMԉ;t &Mٱ P͟|}}5א\+]\14V+-(;PlyAcqN7ۇa6QɄI~ۭ>Q>(u!D27KDPX[N:q"㎑! 5a;y+qҤqœa@RW~/\ il.mv)Lt>3.^3^7b 'ߡs.ג'}R  `XҚü)9R,ˢ9+9adlMXĮ)# ;N!>Q<Ȑ҉``R("% ?/0',;ԍAZ:|8 *ZN * ZmP2%p 1/3&0X^5O!+@eh%3K(a ^fhjl_@  Zvxz_@8>%0]{F pVDa?_D0'K?"`L.&_ l/ȏoڴ/VЯo/τO3u O?/~OO!\@@ hCB P ^ĘQF=~RH(DRJ-]SL5mi=}4DEEړM>UT;^ڔhV]*\UXezVڭkݾ}\uL{WӶ{W`nF\obQ7YÓ-K\|Y3Ǜ=\̣M|ZjY#.ZvԳmػM\Q6xrcw~yt˩_zӹ]|z77|z˷>~?|kP?@p t#+T," ݚpC˺C KDS\D:EZqF\1s$p H!$H#D2I%dI'2#`@J+l2@IPq)1$L3D3M5@5߄3N9sMPX!D`,4%PC:P!'&@J@RK/4SM7SO?5TQG%M)55UUC Pr HIW31Wa%VXH D& @VVB6[mT>7P \IcIhT=`^PWO*pzb6&0\@cbA U(3*:` O6 ݎm+[JAFO6Juޅy j /aLp衁9a`zVujPvVZk`P@d;+XY"+}[Ǻ;vn^ p:؀0IIqqzzw@wS`7AD 7l{ 8]\_D?p ,bpԠuA$0(9BD \@&*o- hB.t8E%6Rb[C'nqfbx%KI4Vbaцc4@qK$MXpM ^R빑PT&GDWt_hD1u%*yJBt#XHW1vl (K=¤' FY\ΑL%.hO|\_Jbe#&W9ɾdrDy>ABQ:%*ոLX7AIB3dJOdK$k pcBICú!DoM8gN%MTpqMIPʤEJb:o͌էĜg-͓H!ӤҼe"WY՜rHOP}= EIq6 sгLI%RDJӕ~3g)ϫ\R߉XQM].I* VROkd:=_CS7PJǢl)qQQQ#mׅ5cL yWѳ%,^*yJ("E*Lcn׺ !KXzV\DmY I[7$0Vve?ߩֶNlIOM󼺜/?ݜʲ5b[-ۈN0eWSuxLl{{Ҭu?HCLlcaucEJB^z&;,31E<;45l{lxCE0gbZfu_jg@S!U8 h 66>]"Pv+#mh hPWFw{S.юfmJ3Қ"b8L 7ƫ5DeOFFuq>"D[!inXFܟ3$fm%ݞa孙x%{l)m)RޖY4D}xY n x\;:@R'xWv[2x\ˆ~.w'Nr Anq3`^g(0׉ȝŕ;ai ~_}8`J3xsŷ]A[%{q W9nI2p~G pM2<}oB&Yy7Q .ÔK_~p 7d:7[NEݷ0[>\0R?iޓp;ߗB ._!{ƛ3w vC'(裠2Xؾ'l = @; "ૠs<3;;>C: :s +?`7p[< ?d2#A Ծ[;{Av=зt 3@,(B˽ ?&lBD v;[B[B?`7hC -\6,\:csB?C[B)>()D;C0CC34@A: u V35;i #<{C;Q?cGrEI|BDȎ(1TņXu[Hl1@E0(*ƃDZ>lD>lZŖ,o˻GD $lwzǩʉ؀(IJJ $ yʽ8YʭTSJ{ YPK` (pˇIPTKHwK0 H 8< 9̚HT P (4DTht $MִL PaL@KPTdLrAN1 xNўO`2lp4TLHthN ϏI$ tpuT PPp %5 ) ];PKq$$PK-AOEBPS/img/normalization.gifGIF89ae3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!,eH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8#ɳϟ@ JѣH*EӧPJիXjʵׯ`ÊK؞SӪ]˶-ɝfʝKݻXw˷_ L*^̸q#KL^ǘ3k rϠCN̹ӌ=^ͺXҨc˞T۸qæͻs ^yȓ_ 9XZK7 nƕk߷0xY|ߨ\r[r3^7uG]~nfG}:+h_OڋM/]yF=8`A&TaC!F8bE1fx1A9c%O0eK+=„L7cgO3wzr(IGKnTiSOF:RHUgWZ&ו6$,Ѡ9kwջo_Oҭ,زYnאs&.1Z.#sgϟA0pfӧQVu뤣aǖ=vmҮqֽwͶ>ҽ'W<ϡG8sױ69{w>|W=_}}񋗿v PolPA ?kK 9A QIQLQʼn\a8Zq1/ü ,"%l$R)+̒/ .,35ltS9T0N:3K;/kA 1BMCmQI)mJ1IM9tAI= UT@Sc+HH*\ȰÇ#JHŋ3jȱG>Iɓ(S\ɲ˗,CœI͛8sӦ̞@ JѣC"]ʴӧPT**Xjʵׯ`ÊKٳhӪ5kUڷpʝKݳ#˷߿ LÈ+^̸qbm1fuL˘3kެFCMiX#O}װcN}1۸s6LUBۻ N|oo+_μq KNsɫk^:ٹ/;ӫ/m>2nUK}߀&``!P{~אv8] і)q5ځxx!¸,!v6渜#b7@gA9/L67dPηKFinO^ehHJDn)ffY凉XMe ngZىapɛ|U)juI(b(qv)jivڛw6d~j *}j:꧷Yܫ~ƪ~~( * vjjjmF,jj+mb+zN[+kk\qKQ mѢJ/,0y;p+1 ;f̮&> \($ Llr^nnl^欱H-.7MO;qu3߼tLL:+\me3\YS[ǭiM7`[}tolTkqR+}ܦZxہ-P͠{xȞLzע>2uK>ז;w# [m '>9ֿ 7RnwVij nۨgpSsC~.O~>s?Cw]ܳ8צ}ow { 4' 2̔B4V f@O27lD\lGc^heOթ;O vu" @m$TㅮA`,4Z m˺Yy\\T~UC|%g\8k1n{R.0'tH>2Z1ic'y:HG}%1D&9rZꃡSL|,M4jB@` DPB >QD-^x1F=~RH%?fDRJ-]@LaęSNeTPCMSRMbiTUB-U֠GA$xUXeFY3.Cu^]}6[ 9Ļ7'V)lxda9;|9%徥L͖;cv jc3%=p ڮAKaa[û6]H֡ \p7]tarϳOxkcN,o?+0?=3<=z.:*T DP?$Ok9 +qPC@8 K/H<$#|l-, C G+3(crނIĜOȾL9܄3E2c3J3 @Ѡ9s@ uSNJ,=m0.DN9]/Q EJtO1Q BC=H>KRkXCR_RIA SERkNM[]4SL4gtUYUYWlnU4T`֍Sjm9-wXuPiFl%X_yWOG{ePTƈgQw7K5i7͏IxJ/P^ Ej{n|yaj%rd ]>8 O$f0e}vELEF7juna~fqlf[*߆m[զ릫m+ûoo㽻ng<[q/_q7pʁ4_|goՇ_~埿z׻m wǿ$Pc@rQT (a0㐻mK UBЅ/a e8І7auãЇ?b8D"шGDbD&6щOb8;PKԤPK-AOEBPS/img/clipping.gif~GIF89a3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIa8sɳϟ@ JѣHɴӧ0sJիXjʵׯ`ÊK՜PӪ]6MpʝK]7i Lp}+^\ǐ#K˘N̹g3=ӨS{M뽦U˞M0׸s3]^oN%ogA=>9\˕[xER=k`[/lӫhcq[?p~9Ts!`}x~ބNt5_:H_!`(`aHߌ*r^88Ѕp" @b& #VG& !:)咛ݨhg CBidr9fI5eM*Ia)gZen&bG `)#M9թ\|IvwJ&z&RfoJf%裟(fdfj4 kjب*کꥪ%z߫b:)a&ƫ2,rxqYنKڶbXn׊.[k+bkͫ/_+0l' U7\ GO%qB,$Q<4 qIL3ۼ`y4שׁ=.'[)42&C~{8uղ!1mIX &6|Cdv] 5ۂ䵆rvmx;}Wci,9nNC7#Oޖ~ y63} A;隟ƺ {y$k2'6$SݼWVr|쳫L~~ e_& 4xaB 6tbD)VxQb9vdH#I4yeJ+Yt 2F3iִygNh|hPC-sgRK6uOSVzjL[vjOcɖ5K)XkٶuPYs m^{&)n`{qbvG)Wof͛9wthѣI6}ujΗYvvCi׶}wɹyx7~yr1+wztZK~{Եw<ϧ×7^:qٷwW~~6<*P|0 B3 5o= 70M U\QD]|8adQ}R <əL&!Z(\n*d,D-/Ť11dLz p "Lp!ÆB(q"Ŋ/b̨q#G: )r$ɒ&OLr%˖?)s&͚6o̩Ξ> *t(х0"Mt)ӦN:*u*ժV+Bu+׮^wf*v,ٲf%=v-۶UӺ+w.]p w/߾~,x0†#Nx1cRC,y2ʖ `3Ξ?-z4ҦONz5֥*z6ڶo}ZHͺ.|8ͼ:wΟC}\#֯cnzzk/~mXɣO^r`=[?=zw^\{ W fw>RXU%#~a؝Z@-m2rhj4֞k=X"h@zF]$pN&7lVcaٚD eR"]^27߉uƦmҨYj&lbo♦yxzɧ~ (m iɩQ[>(L"Jrꗧ2"'Zݡ* 㬴hh:箶~J訁*>B Kj[]ʓɷݱۭ/زвZ&+ЗEˮQp[1 _llK:p#7n.jmS&2 s6s2a*;|1+lF[MG_}L.OI4+c[tNcM>_|}qL7G ~o >$<ɰ2Wz8ӈ;7V1.gci{r.qZO {҇r/v-Ew3ibO;͘3_3+_z㽣^C7{Jn>{(+\ri]/YdgZ0[4GPtKjϚ_擮41avª'<H)5P*9׳MT@-h?|ڳո6t*Tw*^p2-oI0+Q*16"jGr ɁT$\nܪ)LI%<ιqI,# r\Ha$5KIG$N8#Nb4Rt3< TB.P>9=YkԨ;;S,O7ITUaUOc4@e YQXsa؛ZMW\},69tv`6Yh=o/Wp-\=smetWyɅ7]֥W}| X`t_N}!*qxވӥXbXr=QYHaq'{qYy矁疉Q裑NZ饙nZꩩ꫱Z뭹[.;PK+1PK-AOEBPS/models_building.htm Building a Model

5 Building a Model

This chapter explains how to create data mining models and retrieve model details.


Note:

This chapter assumes a basic understanding of mining functions and algorithms, as described in Oracle Data Mining Concepts.

This chapter contains the following topics:

Steps in Building a Model

The general steps involved in creating a data mining model are summarized as follows:

  1. Prepare the data. (See Chapter 3.)

  2. Optionally, specify model settings. (See "Model Settings".)

  3. Create the model. (See "Creating a Model".)

  4. View model details. (See "Model Details".)

  5. Test the model. (See Oracle Data Mining Concepts for information about test metrics for classification and regression.)

  6. Evaluate the model with questions like: How accurate is the model? If there are rules associated with the model, what is their confidence and support? How well does the model address the business question?


Note:

To better understand this process, you can look at the source code of the sample data mining programs provided with Oracle Database. See "Sample Mining Models".


See Also:

Oracle Data Mining Concepts for more information about the process of building a model

Model Settings

Numerous settings are available for configuring data mining models at build time. To specify settings, create a settings table and pass it to the model creation process. A settings table is optional, because all settings have default values.

Model settings are documented in Oracle Database PL/SQL Packages and Types Reference. If you are using the HTML version of Oracle Data Mining Application Developer's Guide, the links in Table 5-1 will take you directly to the documentation for each type of model setting.

Table 5-1 Model Settings

SettingsDocumentation

Modify the mining function

See Oracle Database PL/SQL Packages and Types Reference

Modify the algorithm

See Oracle Database PL/SQL Packages and Types Reference

Set global model characteristics

See Oracle Database PL/SQL Packages and Types Reference

Enable or disable Automatic Data Preparation

See Oracle Database PL/SQL Packages and Types Reference


Specifying a Settings Table

A settings table must have the columns shown in Table 5-2.

Table 5-2 Settings Table Required Columns

Column NameData Type

setting_name

VARCHAR2(30)

setting_value

VARCHAR2(4000)


The values inserted into the setting_name column are one or more of several constants defined in the DBMS_DATA_MINING package. Depending on what the setting name denotes, the value for the setting_value column can be a predefined constant or the actual numerical value corresponding to the setting itself. The setting_value column is defined to be VARCHAR2. You can explicitly cast numerical inputs to string using the TO_CHAR() function, or you can rely on the implicit type conversion provided by the Database.

Example 5-1 creates a settings table for an SVM classification model. Since SVM is not the default classifier, the ALGO_NAME setting is used to specify the algorithm. Setting the SVMS_KERNEL_FUNCTION to SVMS_LINEAR causes the model to be built with a linear kernel. If you do not specify the kernel function, the algorithm chooses the kernel based on the number of attributes in the data.

Example 5-1 Create a Settings Table

CREATE TABLE svmc_sh_sample_settings (
  setting_name VARCHAR2(30),
  setting_value VARCHAR2(4000));

BEGIN 
  INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES
    (dbms_data_mining.algo_name, dbms_data_mining.algo_support_vector_machines);
  INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES
    (dbms_data_mining.svms_kernel_function, dbms_data_mining.svms_linear);
  COMMIT;
END;
/

Specifying the Algorithm

The ALGO_NAME setting specifies the algorithm for a model. If you wish to use the default algorithm for a particular mining function, or if there is only one algorithm available for the mining function, you do not need to specify the ALGO_NAME setting.

Table 5-3 Data Mining Algorithms

ALGO_NAME ValueAlgorithmDefault?Mining Model Function

ALGO_AI_MDL

Minimum Description Length


attribute importance

ALGO_APRIORI_ASSOCIATION_RULES

Apriori


association

ALGO_DECISION_TREE

Decision Tree


classification

ALGO_GENERALIZED_LINEAR_MODEL

Generalized Linear Model


classification and regression

ALGO_KMEANS

k-Means

yes

clustering

ALGO_NAIVE_BAYES

Naive Bayes

yes

classification

ALGO_NONNEGATIVE_MATRIX_FACTOR

Non-Negative Matrix Factorization


feature extraction

ALGO_O_CLUSTER

O-Cluster


clustering

ALGO_SUPPORT_VECTOR_MACHINES

Support Vector MachineSuppor

yes

default regression algorithm

regression, classification, and anomaly detection (classification with no target)


Specifying Costs

The CLAS_COST_TABLE_NAME setting specifies the name of a cost matrix table to be used in building a Decision Tree model. A cost matrix biases a classification model to minimize costly misclassifications. The cost matrix table must have the columns shown in Table 5-4.

Table 5-4 Cost Matrix Table Required Columns

Column NameData Type

actual_target_value

CHAR, VARCHAR2, NUMBER, or FLOAT

predicted_target_value

CHAR, VARCHAR2, NUMBER, or FLOAT

cost

NUMBER


Decision Tree is the only algorithm that supports a cost matrix at build time. However, you can create a cost matrix and associate it with any classification model for scoring.

If you want to use costs for scoring, create a table with the columns shown in Table 5-4, and use the DBMS_DATA_MINING.ADD_COST_MATRIX procedure to add the cost matrix table to the model. You can also specify a cost matrix inline when invoking a PREDICTION function.


See Also:

Oracle Data Mining Concepts for information about costs

Specifying Prior Probabilities

The CLAS_PRIORS_TABLE_NAME setting specifies the name of a table of prior probabilities to be used in building a Naive Bayes model. Prior probabilities can be used to offset differences in distribution between the build data and the actual population. The priors table must have the columns shown in Table 5-5.

Table 5-5 Priors Table Required Columns

Column NameData Type

target_value

CHAR, VARCHAR2, NUMBER, or FLOAT

prior_probability

NUMBER



See Also:

Oracle Data Mining Concepts for information about priors

Specifying Class Weights

The CLAS_WEIGHTS_TABLE_NAME setting specifies the name of a table of class weights to be used to bias a logistic regression (GLM classification) or SVM classification model to favor higher weighted classes. The weights table must have the columns shown in Table 5-6.

Table 5-6 Class Weights Table Required Columns

Column NameData Type

target_value

CHAR, VARCHAR2, NUMBER, or FLOAT

class_weight

NUMBER



See Also:

Oracle Data Mining Concepts for information about class weights

Model Settings in the Data Dictionary

Information about mining model settings can be obtained from the data dictionary view ALL/USER/DBA_MINING_MODEL_SETTINGS. When used with the ALL prefix, this view returns information about the settings for the models accessible to the current user. When used with the USER prefix, it returns information about the settings for the models in the user's schema. The DBA prefix is only available for DBAs.

The columns of ALL_MINING_MODEL_SETTINGS are described as follows and explained in Table 5-7.

SQL> describe all_mining_model_settings
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 OWNER                                     NOT NULL VARCHAR2(30)
 MODEL_NAME                                NOT NULL VARCHAR2(30)
 SETTING_NAME                              NOT NULL VARCHAR2(30)
 SETTING_VALUE                                      VARCHAR2(4000)
 SETTING_TYPE                                       VARCHAR2(7)

Table 5-7 ALL_MINING_MODEL_SETTINGS

ColumnDescription

owner

Owner of the mining model

model_name

Name of the mining model

setting_name

Name of the setting

setting_value

Value of the setting

setting_type

'INPUT' if the value is specified by a user; 'DEFAULT' if the value is system-generated


The following query lists the settings for the SVM classification model SVMC_SH_CLAS_SAMPLE. The ALGO_NAME, CLAS_PRIORS_TABLE_NAME, and SVMS_KERNEL_FUNCTION settings are user-specified. These settings have been specified in a settings table for the model.

Example 5-2 ALL_MINING_MODEL_SETTINGS

SQL> COLUMN setting_value FORMAT A35
SQL> SELECT setting_name, setting_value, setting_type
            FROM all_mining_model_settings
            WHERE model_name in 'SVMC_SH_CLAS_SAMPLE';
 
SETTING_NAME                   SETTING_VALUE                       SETTING
------------------------------ ----------------------------------- -------
SVMS_ACTIVE_LEARNING           SVMS_AL_ENABLE                      DEFAULT
PREP_AUTO                      OFF                                 DEFAULT
SVMS_COMPLEXITY_FACTOR         0.244212                            DEFAULT
SVMS_KERNEL_FUNCTION           SVMS_LINEAR                         INPUT
CLAS_WEIGHTS_TABLE_NAME        svmc_sh_sample_class_wt             INPUT
SVMS_CONV_TOLERANCE            .001                                DEFAULT
ALGO_NAME                      ALGO_SUPPORT_VECTOR_MACHINES        INPUT
 
7 rows selected.






















SQL> COLUMN setting_value FORMAT A25
SQL> SELECT setting_name, setting_value, setting_type 
                           FROM all_mining_model_settings 
           WHERE model_name in 'SVMC_SH_CLAS_SAMPLE';
 
SETTING_NAME                   SETTING_VALUE                  SETTING_TYPE
------------------------------ -------------------------      ------------
ALGO_NAME                      ALGO_SUPPORT_VECTOR_MACHINES   INPUT
SVMS_ACTIVE_LEARNING           SVMS_AL_ENABLE                 DEFAULT
CLAS_PRIORS_TABLE_NAME         svmc_sh_sample_priors          INPUT
PREP_AUTO                      OFF                            DEFAULT
SVMS_COMPLEXITY_FACTOR         0.244212                       DEFAULT
SVMS_KERNEL_FUNCTION           SVMS_LINEAR                    INPUT
SVMS_CONV_TOLERANCE            .001                           DEFAULT

Note:

Some model settings are determined by the algorithm if not specified in a settings table. You can find the system-generated setting values by querying the ALL_MINING_MODEL_SETTINGS view.


See Also:

Oracle Database PL/SQL Packages and Types Reference for details about model settings

Creating a Model

The CREATE_MODEL procedure in the DBMS_DATA_MINING package creates a mining model with the specified name, mining function, and case table (build data).

DBMS_DATA_MINING.CREATE_MODEL (
      model_name            IN VARCHAR2,
      mining_function       IN VARCHAR2,
      data_table_name       IN VARCHAR2,
      case_id_column_name   IN VARCHAR2,
      target_column_name    IN VARCHAR2 DEFAULT NULL,
      settings_table_name   IN VARCHAR2 DEFAULT NULL,
      data_schema_name      IN VARCHAR2 DEFAULT NULL,
      settings_schema_name  IN VARCHAR2 DEFAULT NULL,
      transform_list        IN DM_TRANSFORMS DEFAULT NULL;)

See Also:

DBMS_DATA_MINING.CREATE_MODEL in Oracle Database PL/SQL Packages$Yۦ and Types Reference

Mining Functions

The mining function is a required argument to the CREATE_MODEL procedure. A data mining function specifies a class of problems that can be modeled and solved.

Data mining functions implement either supervised or unsupervised learning. Supervised learning uses a set of independent attributes to predict the value of a dependent attribute or target. Unsupervised learning does not distinguish between dependent and independent attributes.

Supervised functions are predictive. Unsupervised functions are descriptive.

You can specify any of the values in Table 5-8 for the mining_function parameter to CREATE_MODEL.

Table 5-8 Mining Model Functions

Mining_Function ValueDescription

ASSOCIATION

Association is a descriptive mining function. An association model identifies relationships and the probability of their occurrence within a data set.

Association models use the Apriori algorithm.

ATTRIBUTE_IMPORTANCE

Attribute Importance is a predictive mining function. An attribute importance model identifies the relative importance of an attribute in predicting a given outcome.

Attribute Importance models use the Minimal Description Length algorithm.

CLASSIFICATION

Classification is a predictive mining function. A classification model uses historical data to predict a categorical target.

Classification models can use: Naive Bayes, Decision Tree, Logistic Regression, or Support Vector Machine algorithms. The default is Naive Bayes.

The classification function can also be used for anomaly detection. In this case, the SVM algorithm with a null target is used (One-Class SVM).

CLUSTERING

Clustering is a descriptive mining function. A clustering model identifies natural groupings within a data set.

Clustering models can use: k-Means or O-Cluster algorithms. The default is k-Means.

FEATURE_EXTRACTION

Feature Extraction is a descriptive mining function. A feature extraction model creates an optimized data set on which to base a model.

Feature extraction models use the Non-Negative Matrix Factorization algorithm.

REGRESSION

Regression is a predictive mining function. A regression model uses historical data to predict a numerical target.

Regression models can use Support Vector Machine or Linear Regression. The default is Support Vector Machine.



See Also:

Oracle Data Mining Concepts for an introduction to mining functions

Transformation List

You can optionally specify a list of transformations to be applied to the build data before it is acted on by the algorithm. You can use the STACK interface in DBMS_DATA_MINING_TRANSFORM to build a list of transformation expressions for different attributes, you can specify a single transformation using the XFORM interface in DBMS_DATA_MINING_TRANSFORM, or you can write your own SQL expressions.

The transformation list argument to CREATE_MODEL interacts with the PREP_AUTO setting, which controls Automatic Data Preparation (ADP):

  • When ADP is on and you specify a transformation list, your transformations are applied with the automatic transformations and embedded in the model.

  • When ADP is off and you specify a transformation list, your transformations are applied and embedded in the model, but no system-generated transformations are performed.

  • When ADP is on and you do not specify a transformation list, the system-generated transformations are applied and embedded in the model.

  • When ADP is off and you do not specify a transformation list, no transformations are embedded in the model; you must separately prepare the data sets you use for building, testing, and scoring the model. This is the pre-release 11 behavior; it is the default behavior in 11g.


See Also:

Oracle Data Mining Concepts for information about Automatic Data Preparation

Model Details

Model details describe model attributes, rules, and other information about the model. You can invoke a GET_MODEL_DETAILS function to retrieve model details. A separate GET_MODEL_DETAILS function exists for each algorithm.

Model details reverse the transformations applied to the attributes, thus enabling the information to be easily understood by a user. You can obtain the transformations embedded in the model by invoking the GET_MODEL_TRANSFORMATIONS function.

Model details, summarized in Table 5-9, support model transparency.

Table 5-9 Model Details

AlgorithmModel Details

Apriori (association rules)

Association rules and frequent itemsets

Decision Tree

The full model with its content and rules

Generalized Linear Models

Attribute-level coefficient and statistics from GET_MODEL_DETAILS_GLM and global model information from GET_MODEL_DETAILS_GLOBAL

k-Means

For each cluster: statistics and hierarchy information, centroid, attribute histograms, and rules

MDL (attribute importance)

Ranked importance of each attribute

Naive Bayes

Conditional probabilities and priors

Non-Negative Matrix Factorization

Coefficients

O-Cluster

For each cluster: statistics and hierarchy information, centroid, attribute histograms, and rules

Support Vector Machine

Coefficients for linear models


Mining Model Schema Objects

Mining models are database schema objects. Several system and object privileges, described in "Users and Privileges" in Oracle Data Mining Administrator's Guide, govern data mining activities. Mining models also support SQL AUDIT and SQL COMMENT, as described in "Mining Model Schema Objects" in Oracle Data Mining Administrator's Guide.

Mining Models in the Data Dictionary

Information about mining model objects can be obtained from the data dictionary view ALL/USER/DBA_MINING_MODELS. When used with the ALL prefix, this view returns information about the mining models accessible to the current user. When used with the USER prefix, it returns information about the mining models in the user's schema. The DBA prefix is only available for DBAs.

The columns of ALL_MINING_MODELS are described as follows and explained in Table 5-10.

SQL> describe all_mining_models
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 OWNER                                     NOT NULL VARCHAR2(30)
 MODEL_NAME                                NOT NULL VARCHAR2(30)
 MINING_FUNCTION                                    VARCHAR2(30)
 ALGORITHM                                          VARCHAR2(30)
 CREATION_DATE                             NOT NULL DATE
 BUILD_DURATION                                     NUMBER
 MODEL_SIZE                                         NUMBER
 COMMENTS                                           VARCHAR2(4000)

Table 5-10 ALL_MINING_MODELS

ColumnDescription

owner

Owner of the mining model.

model_name

Name of the mining model.

mining_function

The mining model function. See "Mining Functions".

algorithm

The algorithm used by the mining model. See "Specifying the Algorithm".

creation_date

The date on which the mining model was created.

build_duration

The duration of the mining model build process in seconds.

model_size

The size of the mining model in megabytes.

comments

Results of a SQL COMMENT applied to the mining model.


The query in Example 5-3 returns information about the mining models in the schema DMUSER.

Example 5-3 ALL_MINING_MODELS

SQL> select model_name, mining_function, algorithm, creation_date, build_duration
            FROM all_mining_models WHERE owner IN 'DMUSER';

MODEL_NAME              MINING_FUNCTION         ALGORITHM                  CREATION_DATE BUILD_DURA 
---------------------   ---------------------  --------------------------- ----------------------- 
AI_SH_SAMPLE            ATTRIBUTE_IMPORTANCE   MINIMUM_DESCRIPTION_LENGTH   13-JUN-07         1 
AR_SH_SAMPLE            ASSOCIATION_RULES      APRIORI_ASSOCIATION_RULES    13-JUN-07         5 
DT_SH_CLAS_SAMPLE       CLASSIFICATION         DECISION_TREE                13-JUN-07         4 
KM_SH_CLUS_SAMPLE       CLUSTERING             KMEANS                       13-JUN-07         7 
NB_SH_CLAS_SAMPLE       CLASSIFICATION         NAIVE_BAYES                  13-JUN-07         3 
OC_SH_CLUS_SAMPLE       CLUSTERING             O_CLUSTER                    13-JUN-07        14 
NMF_SH_SAMPLE           FEATURE_EXTRACTION     NONNEGATIVE_MATRIX_FACTOR    13-JUN-07         2 
SVMC_SH_CLAS_SAMPLE     CLASSIFICATION         SUPPORT_VECTOR_MACHINES      13-JUN-07         4 
GLMR_SH_REGR_SAMPLE     REGRESSION             GENERALIZED_LINEAR_MODEL     13-JUN-07         3 
GLMC_SH_CLAS_SAMPLE     CLASSIFICATION         GENERALIZED_LINEAR_MODEL     13-JUN-07         3 
SVMR_SH_REGR_SAMPLE     REGRESSION             SUPPORT_VECTOR_MACHINES      13-JUN-07         7 
SVMO_SH_CLAS_SAMPLE     CLASSIFICATION         SUPPORT_VECTOR_MACHINES      13-JUN-07         3 
T_SVM_CLAS_SAMPLE       CLASSIFICATION         SUPPORT_VECTOR_MACHINES      13-JUN-07         8 
T_NMF_SAMPLE            FEATURE_EXTRACTION     NONNEGATIVE_MATRIX_FACTOR    13-JUN-07         7

Mining Model Privileges

You need the CREATE MINING MODEL privilege to create models in your own schema. You can perform any operation on models that you own. This includes applying the model, adding a cost matrix, renaming the model, and dropping the model.

You can perform specific operations on mining models in other schemas if you have the appropriate system privileges. For example, CREATE ANY MINING MODEL enables you to create models in other schemas. SELECT ANY MINING MODEL enables you to apply models that reside in other schemas. You can add comments to models if you have the COMMENT ANY MINING MODEL privilege.

Sample Mining Models

The models listed in Example 5-3 are created by the Oracle Data Mining sample programs provided with Oracle Database. The sample programs, in PL/SQL and in Java, create mining models that illustrate each of the algorithms supported by Oracle Data Mining.

The sample programs are installed using Oracle Database Companion. Once installed, you can locate them in the rdbms/demo subdirectory under Oracle Home. You can list the sample PL/SQL data mining programs on a Linux system with commands like these.

> cd $ORACLE_HOME/rdbms/demo
> ls dm*.sql

Likewise, you can list the sample Java data mining programs with commands like the following:

> cd $ORACLE_HOME/rdbms/demo
> ls dm*.java

See Also:

Oracle Data Mining Administrator's Guide to learn how to install, configure, and execute the Data Mining sample programs.

PKc.$PK-AOEBPS/api_tour.htm A Tour of the Data Mining APIs

2 A Tour of the Data Mining APIs

This chapter provides an overview of the PL/SQL, SQL, and Java interfaces to Oracle Data Mining.


Note:

The Oracle Data Mining Java API is deprecated in this release.

Oracle recommends that you not use deprecated features in new applications. Support for deprecated features is for backward compatibility only


This chapter contains the following sections:

Data Mining PL/SQL Packages

The PL/SQL interface to Oracle Data Mining is implemented in three packages:

  • DBMS_DATA_MINING, the primary interface to Oracle Data Mining

  • DBMS_DATA_MINING_TRANSFORM, convenience routines for data transformation

  • DBMS_PREDICTIVE_ANALYTICS, predictive analytics

DBMS_DATA_MINING

The DBMS_DATA_MINING package includes procedures for:

  • Creating, dropping, and renaming mining models

  • Applying a model to new data

  • Describing the model details

  • Creating costs and computing test metrics for a classification model

  • Exporting and importing models

CREATE_MODEL

The CREATE_MODEL procedure creates a mining model. The attributes, transformations, rules, and other information internal to the model are returned by GET_MODEL_DETAILS functions. You can also obtain information about mining models by querying data dictionary views, as described in "Data Mining Data Dictionary Views".

APPLY

The APPLY procedure creates a table with specific columns and populates the columns with mining results. The columns of this table vary based on the particular mining function and algorithm.


Note:

The Data Mining SQL functions, introduced in Oracle Database 10.2, are now generally the preferred method for applying Data Mining models. See "Data Mining SQL Functions".

DBMS_DATA_MINING_TRANSFORM

This package includes routines for transforming the data to make it suitable for mining. Since Oracle Data Mining supports Automatic Data Transformation (ADP), you will not need to use this package unless you want to implement specialized transformations.

You can supplement the ADP-generated transformations with additional transformations that you specify yourself, or you can elect to transform the data yourself instead of using ADP.

The routines in DBMS_DATA_MINING_TRANSFORM are convenience routines to assist you in creating your own transformations. If these routines do not entirely suit your needs, you can write SQL to modify their output, or you can write your own routines.

To specify transformations for a model, pass a transformation list to the DBMS_DATA_MINING.CREATE_MODEL procedure. You can use the STACK procedures in DBMS_DATA_MINING_TRANSFORM to build the transformation list.

Oracle Data Mining embeds automatic transformations and transformations you pass to CREATE_MODEL in the model. The embedded transformations are automatically applied to the data when the model is applied. You do not need to separately transform the test or scoring data.


See Also:


DBMS_PREDICTIVE_ANALYTICS

This package includes routines for predictive analytics, an automated form of data mining. With predictive analytics, you do not need to be aware of model building or scoring. All mining activities are handled internally by the predictive analytics procedure.

Predictive analytics routines prepare the data, build a model, score the model, and return the results of model scoring. Before exiting, they delete the model and supporting objects.

Oracle predictive analytics supports these routines:

  • EXPLAIN ranks attributes in order of influence in explaining a target column.

  • PREDICT predicts the value of a target column based on values in the input data.

  • PROFILE generates rules that describe the cases from the input data.


    See Also:

    DBMS_PREDICTIVE_ANALYTICS in Oracle Database PL/SQL Packages and Types Reference

Data Mining Data Dictionary Views

You can obtain information about mining models from the data dictionary. The data dictionary views for Oracle Data Mining are available for ALL_, USER_, and DBA_ access.

The Data Mining data dictionary views are summarized as follows:

  • ALL_MINING_MODELS returns information about the mining models to which you have access.

    See "Mining Model Schema Objects".

  • ALL_MINING_MODEL_ATTRIBUTES returns information about the attributes of the mining models to which you have access.

    See "About Attributes".

  • ALL_MINING_MODEL_SETTINGS returns information about the settings for the mining models to which you have access.

    See "Model Settings".

Data Mining SQL Functions

The built-in SQL functions for Data Mining implement scoring operations for models that have already been created in the database. They provide the following benefits:

  • Models can be easily deployed within the context of existing SQL applications.

  • Scoring operations take advantage of existing query execution functionality. This provides performance benefits, especially in the case of single row scoring.

  • Scoring results are pipelined, enabling the rows to be returned iteratively as they are produced. Pipelining is an optimization that greatly improves performance. For information about pipelining, see Oracle Database PL/SQL Language Reference.


Note:

SQL functions are built into Oracle Database and are available for use within SQL statements. SQL functions should not be confused with functions defined in PL/SQL packages.

When applied to a given row of scoring data, classification and regression models provide the best predicted value for the target and the associated probability of that value occurring. The SQL functions for prediction are described in Table 2-1.

Table 2-1 SQL Functions for Prediction

FunctionDescription

PREDICTION

Returns the best prediction for the target

PREDICTION_BOUNDS

(GLM only) Returns the upper and lower bounds of the interval wherein the values (linear regression) or probabilities (logistic regression) will lie

PREDICTION_COST

Returns a measure of the cost of incorrect predictions

PREDICTION_DETAILS

Returns the rules of a Decision Tree model

PREDICTION_PROBABILITY

Returns the probability of a given prediction

PREDICTION_SET

Returns the results of a classification model, including the predictions and associated probabilities for each case


Applying a cluster model to a given row of scoring data returns the cluster ID and the probability of that row's membership in the cluster. The SQL functions for clustering are described in Table 2-2.

Table 2-2 SQL Functions for Clustering

FunctionDescription

CLUSTER_ID

Returns the ID of the predicted cluster

CLUSTER_PROBABILITY

Returns the probability of a case belonging to a given cluster

CLUSTER_SET

Returns a list of all possible clusters to which a given case belongs along with the associated probability of inclusion


Applying a feature extraction model involves the mapping of features (sets of attributes) to columns in the scoring data set. The SQL functions for feature extraction are described in Table 2-3.

Table 2-3 SQL Functions for Feature Extraction

FunctionDescription

FEATURE_ID

Returns the ID of the feature with the highest coefficient value

FEATURE_SET

Returns a list of objects containing all possible features along with the associated coefficients

FEATURE_VALUE

Returns the value of a given feature


Data Mining Java API

The Oracle Data Mining Java API is an Oracle implementation of the JDM standard (JSR-73) Java API. It is a thin API developed using the rich in-database functionality of Oracle Data Mining.


Note:

The Oracle Data Mining Java is deprecated in this release.

Oracle recommends that you not use deprecated features in new applications. Support for deprecated features is for backward compatibility only


The Oracle Data Mining Java API implements Oracle specific extensions to provide all the data mining features available in the database. All extensions are designed to be compliant with the JDM standards extension framework. All the mining functions and algorithms available in the database are exposed through the Oracle Data Mining Java API.

Oracle Database 10.2.0.1 introduced the JDM 1.0 standard compliant API that replaced the old Oracle proprietary Java API in the previous releases. Database 10.2.0.2 patch-set release extended the JDM standards support by implementing Oracle Data Mining Java API compatible with JDM 1.1.

In this release, the Oracle Data Mining Java API continues to be compatible with the JDM 1.1 and provides new data mining functionality in the database server as Oracle extensions. In this release new Oracle features include automatic and embedded data preparation, generalized linear models, transformation sequencing and task dependency specifications.

The JDM Standard

JDM is an industry standard Java API for data mining developed under the Java Community Process (JCP). It defines Java interfaces that vendors can implement for their Data Mining Engine (DME). It includes interfaces supporting mining functions such as classification, regression, clustering, attribute importance and association along with specific mining algorithms such as naïve bayes, support vector machines, decision trees, feed forward neural networks, and k-means.

An overview of the Java packages defined by the standards is listed in Table 2-4. For more details, refer to the Java documentation published with the standard at http://www.jcp.org. In the Go to JSR box, type in 73.

Table 2-4 JDM Standard Java Packages

PackageDescription

javax.datamining

Defines objects supporting all JDM subpackages.

javax.datamining.base

Defines objects supporting many top-level mining objects. Introduced to avoid cyclic package dependencies.

javax.datamining.resource

Defines objects that support connecting to the Data Mining ENgine and executing tasks.

javax.datamining.data

Defines objects supporting logical and physical data, model signature, taxonomy, category set and the generic super class category matrix.

javax.datamining.statistics

Defines objects supporting attribute statistics.

javax.datamining.rules

Defines objects supporting rules and their predicate components.

javax.datamining.task

Defines objects supporting tasks for build, compute statistics, import, and export. Task has an optional subpackage for apply since apply is used mainly for supervised and clustering functions.

javax.datamining.association

Defines objects supporting the build settings and model for association.

javax.datamining.clustering

Defines objects supporting the build settings and model for clustering.

javax.datamining.attributeimportance

Defines objects supporting the build settings and model for attribute importance.

javax.datamining.supervised

Defines objects supporting the build settings and models for supervised learning functions, specifically classification and regression, with corresponding optional packages. It also includes a common test task for the classification and regression functions.

javax.datamining.algorithm

Defines objects supporting the settings that are specific to algorithms. The algorithm package has optional sub packages for different algorithms.

javax.datamining.modeldetail

Defines objects supporting details of various model representation. Model Details has optional sub packages for different model details.


Oracle Extensions to JDM

Oracle extensions are defined to support the functionality that is not part of the JDM standards. This section gives an overview of these extensions.

Oracle extensions have the following major additional features:

  • Feature Extraction function with the Non-negative Matrix Factorization (NMF) algorithm

  • Generalized Linear Model algorithm for regression and classification functions

  • Oracle-proprietary clustering algorithm, Orthogonal Partitioning Clustering (O-CLuster)

  • Oracle-proprietary classification algorithm, Adaptive Bayes Network (ABN) (deprecated)

  • Automated and embedded data transformations

  • Predictive analytics tasks

An overview of the Oracle extensions higher-level Java packages is provided in Table 2-5.

Table 2-5 Oracle Extensions Higher-Level Packages

PackageDescription

oracle.dmt.jdm.featureextraction

Defines the objects related to the feature extraction function. Feature extraction supports the scoring operation.

oracle.dmt.jdm.algorithm.nmf

Defines the objects related to the Non-negative Matrix Factorization (NMF) algorithm.

oracle.dmt.jdm.algorithm.glm

oracle.dmt.jdm.modeldetail.glm

Defines the objects related to the Generalized Linear Model (GLM) algorithm.

oracle.dmt.jdm.algorithm.ocluster

Defines the objects related to the Orthogonal Clustering (O-Cluster) algorithm.

oracle.dmt.jdm.algorithm.abn

Defines the objects related to the Adaptive Bayes Network (ABN) algorithm (deprecated).

oracle.dmt.jdm.transform

Defines the objects related to the transformations.


Principal Objects in the Oracle Dat=)a Mining Java API

In JDM, named objects are objects that can be saved using the save method in the Connection. All the named objects are inherited from the javax.datamining.MiningObject interface. You can choose to persist the named objects either permanently (persistent objects) or only for the lifetime of the Connection object (transient objects).

Table 2-6 lists the JDM named objects supported by Oracle Data Mining.

Table 2-6 JDM Named Objects Supported by Oracle Data Mining

Persistent ObjectsTransient ObjectsUnsupported Objects

Model

Apply Settings

Logical Data

Build Settings

Physical Dataset

Taxonomy

Task



Cost Matrix



Test Metrics



Transformation sequence




Physical Data Set

Physical data sets refer to the data to be used as input to data mining operations. PhysicalDataSet objects reference specific data identified by a URI. Oracle Data Mining supports a table or view in the same database as a valid physical dataset URI. Syntax of the physical dataset URI is as follows:

Data URI Syntax:

[schemaName.] tableName/viewName

The PhysicalDataSet object can support multiple data representations. Oracle Data Mining supports two types of data representation: single-record case and wide data. (See Chapter 3 for details.) The Oracle Data Mining implementation requires users to specify the case ID column in the physical dataset.

A PhysicalDataSet object is a transient object in the Oracle Data Mining Java API. It is stored in the Connection as an in-memory object.

Build Settings

A BuildSettings object captures the high-level specification input for building a model. The API specifies mining functions: classification, regression, attribute importance, association, clustering, and feature extraction.

Build settings allow a user to specify the type of result desired without having to specify a particular algorithm. Although a build settings object allows for the specification of an algorithm and its settings, if the algorithm settings are omitted, the DME selects an algorithm based on the build settings and possibly characteristics of the data.

Build settings may also be validated for correct parameters using the verify method.

A BuildSettings object is persistent; it is stored as a table with a user-specified name in the user's schema. This settings table is interoperable with the PL/SQL API. Oracle recommends that you not modify the build settings table manually.

Task

The Execute method in the Connection object is used to start an execution of a mining task. Typically, mining operations are done using tables with millions of records, so the execution of operations such as a model build can take a long time.

JDM supports asynchronous execution of mining tasks using DBMS_SCHEDULER in the database. Each mining task is stored as a DBMS_SCHEDULER job object in the user's schema. When the user saves the task object, it creates a job object and sets the object to be in the DISABLED state. When the user executes a task, it enables the job to start execution.

To monitor tasks that are executed asynchronously, the Execute method returns a javax.datamining.ExecutionHandle object. It provides methods such as waitForCompletion and getStatus to retrieve the status details of the task.

Model

A Model object is the result of applying an algorithm to data as specified in a BuildSettings object.

Models can be used in several operations. They can be:

  • Inspected, for example to examine the rules produced from a decision tree or association

  • Tested for accuracy

  • Applied to data for scoring

  • Exported to an external representation such as native format or PMML

  • Imported for use in the DME

When a model is applied to data, it is submitted to the DME for interpretation. A Model object references its BuildSettings object as well as the Task that created it. as.

Test Metrics

A TestMetrics object is the result of testing a supervised model with test data. Based on the type of mining function, different test metrics are computed. For classification models, accuracy, confusion-matrix, lift, and receiver-operating characteristic can be computed to access the model. Similarly for regression models, R-squared and RMS errors can be computed.

Apply Settings

An ApplySettings object allows users to tailor the results of an apply task. It contains a set of ordered items. Output can consist of:

  • Data (key attributes) to be passed through to the output from the input dataset.

  • Values computed from the apply itself: score, probability, and in the case of decision trees, rule identifiers.

  • Multi-class categories for its associated probabilities. For example, in a classification model with target favoriteColor, users could select the specific colors to receive the probability that a given color is favorite.

Each mining function class defines a method to construct a default apply settings object. This simplifies the programmer's effort if only standard output is desired. For example, typical output for a classification apply would include the top prediction and its probability.

Transformation Sequence

A TransformationSequence object represents the sequence of transformations that are to be performed as part of a mining operation. For example, a Support Vector Machine model build involves outlier handling and normalization transformations. In addition to this, there can be new derived attribute creation and business transformations, and so on. Typically these transformations are reused for other model builds and hence applications can save the transformation sequence as a named object in the API.

Transformation sequences can be used either to perform transformations as a separate task or embed them to the modeling process by specifying it as one of the input objects for model building.


See Also:

Chapter 7 for more details about the Java API

PKRHG=PK-AOEBPS/img_text/test_metrics.htm* Description of the illustration test_metrics.gif

Class diagram showing TestMetrics object in the ODM Java API.

PK'ڲPK-AOEBPS/img_text/binning.htm+ Description of the illustration binning.gif

Class diagram showing transformation objects in the ODM Java API.

PKgqPK-A!OEBPS/img_text/text_transform.htm' Description of the illustration text_transform.gif

Class diagram showing text transformation in the ODM Java API.

PKwPK-AOEBPS/img_text/clipping.htm0 Description of the illustration clipping.gif

Class diagram showing clipping objects in the ODM Java API.

PKl PK-A!OEBPS/img_text/apply_settings.htm- Description of the illustration apply_settings.gif

Class diagram showing ApplySettings in the ODM Java API.

PKPK-A!OEBPS/img_text/build_settings.htm, Description of the illustration build_settings.gif

Class diagram showing Build settings in the ODM Java API.

PKPK-AOEBPS/img_text/named_object.htm Description of the illustration named_object.gif

Class diagram showing the inheritance hierarchy of the named objects in the JDM standard API.

PK9PK-A OEBPS/img_text/execute_tasks.htm/ Description of the illustration execute_tasks.gif

Class diagram showing Task objects in the ODM Java API.

PKV0VPK-A OEBPS/img_text/model_details.htm Description of the illustration model_details.gif

Class diagram showing Model and ModelDetail objects in the ODM Java API.

PK PK-AOEBPS/img_text/data_objects.htm Description of the illustration data_objects.gif

Class diagram showing the relationships of data objects in the ODM Java API.

PKu;jPK-A(OEBPS/img_text/oratransformationtask.htm Description of the illustration oratransformationtask.gif

Class diagram showing the OraTransformationTask object in the ODM Java API.

PKhNPK-A OEBPS/img_text/normalization.htm& Description of the illustration normalization.gif

Class diagram showing normalization objects in the ODM Java API.

PK0ӵPK-AOEBPS/api_using.htmbQ Data Mining API Use Cases

1 Data Mining API Use Cases

This chapter shows how you can perform complex data mining operations by using simple SQL queries and PL/SQL procedures. The examples show techniques for obtaining valuable information about your customers. This kind of information is needed to answer business questions, such as: How should we position a product? When should we introduce a new product? What pricing and sales promotion strategies should we use?


Note:

The base interfaces to Oracle Data Mining are PL/SQL packages and SQL functions. Most of the examples throughout this manual use PL/SQL and SQL code.


See Also:


This chapter contains the following topics:

Analyze Customer Demographics and Buying Patterns

The code fragments in this section show how you can apply data mining models to learn more about your customers.

These examples use models that were previously created. They exist in Oracle Database as database objects. For the sake of simplicity, we can assume that you created the models, that they exist within your schema, and that you are executing the SQL statements that apply them. You could have used the PL/SQL API or Oracle Data Miner to create the models.

The primary method for applying data mining models is by executing specialized SQL functions. There exists a separate family of SQL functions for prediction, clustering, and feature extraction.


Note:

The examples in the first two sections of this chapter illustrate SQL syntax for different use cases, but the code uses hypothetical object names. For example, a table might be named my_table.

Segment Customer Base and Predict Attrition

The query in Example 1-1 divides customers into segments and predicts customer attrition.

The segments are created by a clustering model named clus_model. The model uses heuristics to divide the customer database into groups that have similar characteristics.The prediction is generated by a classification model called svmC_model.

The model predicts the attrition probability for each customer in each segment. The data is returned by segment, ordered by the overall attrition propensity in the segment.

Example 1-1 Predict Attrition for Customer Segments

SELECT count(*) as cnt, 
       AVG(PREDICTION_PROBABILITY(svmC_model,
               'attrite' USING *)) as avg_attrite,
       AVG(cust_value_score)
  FROM customers 
 GROUP BY CLUSTER_ID(clus_model USING *)
 ORDER BY avg_attrite DESC;

The sophisticated analytics within this seemingly simple query let you see your customer base within natural groupings based on similarities. The SQL data mining functions show you where your most loyal and least loyal customers are. This information can help you make decisions about how to sell your product. For example, if most of the customers in one segment have a high probability to attrite, you might take a closer look at the demographics of that segment when considering your marketing strategy.

The CLUSTER_ID function in Example 1-1 applies the mining model clus_model to the customers table. It returns the segment for each customer. The number of segments is determined by the clustering algorithm. Oracle Data Mining supports two clustering algorithms: enhanced k-Means and O-Cluster.

The PREDICTION_PROBABILITY function in Example 1-1 applies the mining model svmC_model and returns the probability to attrite for each customer. Oracle Data Mining supports a number of classification algorithms. In this case, the model name implies that Support Vector Machine was chosen as the classifier.

Predict Missing Incomes

The sample query in Example 1-2 returns the ten customers who are most likely to attrite, based on age, gender, annual_income, and zipcode.

In addition, since annual_income is often missing, the PREDICTION function is used to perform missing value imputation for the annual_income attribute. The PREDICTION function applies the regression model, svmR_model, to predict the most likely annual income. The NVL function replaces missing annual income values with the resulting prediction.

Example 1-2 Predict Customer Attrition and Transform Missing Income Values

SELECT * FROM (
  SELECT cust_name, cust_contact_info
    FROM customers
   ORDER BY 
     PREDICTION_PROBABILITY(tree_model, 'attrite'
       USING age, gender, zipcode,
         NVL(annual_income, 
             PREDICTION(svmR_model USING *)) 
           as annual_income) DESC)
WHERE rownum < 11;

Find Anomalies in the Customer Data

These examples use a one-class SVM model to discover atypical customers (outliers), find common demographic characteristics of the most typical customers, and compute the probability that a new or hypothetical customer will be a typical affinity card holder.

Find the Top 10 Outliers

Find the top 10 outliers -- customers that differ the most from the rest of the population. Depending on the application, such atypical customers can be removed from the data.

SELECT cust_id FROM (
 SELECT cust_id
 FROM svmo_sh_sample_prepared
  ORDER BY prediction_probability(SVMO_SH_Clas_sample, 0 using *) DESC, 1)
WHERE rownum < 11;

Compute the Probability of a New Customer Being a Typical Affinity Card Member

Compute the probability of a new or hypothetical customer being a typical affinity card holder. Normalization of the numerical attributes is performed on-the-fly.

WITH age_norm AS (
   SELECT shift, scale FROM SVMO_SH_sample_norm WHERE col = 'AGE'),
     yrs_residence_norm AS (
       SELECT shift, scale FROM svmo_sh_sample_norm WHERE col = 'YRS_RESIDENCE')
       SELECT prediction_probability(SVMO_SH_Clas_sample, 1 using 
                             (44 - a.shift)/a.scale AS age,
                             (6 - b.shift)/b.scale AS yrs_residence,
                             'Bach.' AS education,
                             'Married' AS cust_marital_status,
                             'Exec.' AS occupation,
                             'United States of America' AS country_name,
                             'M' AS cust_gender,
                             'L: 300,000 and above' AS cust_income_level,
                             '3' AS houshold_size
                             ) prob_typical
FROM age_norm a, yrs_residence_norm b;

Find the Demographics of a Typical Affinity Card Member

Find demographic characteristics of the typical affinity card members. These statistics will not be influenced by outliers and are likely to provide a more truthful picture of the population of interest than statistics computed on the entire group of affinity members.

SELECT a.cust_gender, round(avg(a.age)) age, 
       round(avg(a.yrs_residence)) yrs_residence,
       count(*) cnt
FROM mining_data_one_class_v a
WHERE PREDICTION(SVMO_SH_Clas_sample using *) = 1
GROUP BY a.cust_gender
ORDER BY a.cust_gender;  

Evaluate the Success of a Marketing Campaign

This example uses a classification model to predict who will respond to a marketing campaign for DVDs and why.

  1. First predict the responders.

    This statement uses the PREDICTION and PREDICTION_DETAILS functions to apply the model campaign_model.

    SELECT cust_name, 
       PREDICTION(campaign_model USING *) 
          AS responder,
       PREDICTION_DETAILS(campaign_model USING *) 
          AS reason
    FROM customers;
    
  2. Combine the predictions with relational data.

    This statement combines the predicted responders with additional information from the sales table. In addition to predicting the responders, it shows how much each customer has spent for a period of three months before and after the start of the campaign.

    SELECT cust_name, 
            PREDICTION(campaign_model USING *) AS responder,
            SUM(CASE WHEN purchase_date < 15-Apr-2005 THEN
                purchase_amt ELSE 0 END) AS pre_purch,
            SUM(CASE WHEN purchase_date >= 15-Apr-2005 THEN
                purchase_amt ELSE 0 END) AS post_purch
     FROM customers, sales 
     WHERE sales.cust_id = customers.cust_id 
       AND purchase_date BETWEEN 15-Jan-2005 AND 14-Jul-2005
     GROUP BY cust_id, PREDICTION(campaign_model USING *);
    
  3. Combine the predictions and relational data with multi-domain, multi-database data.

    In addition to predicting responders, find out how much each customer has spent on DVDs for a period of three months before and after the start of the campaign.

    SELECT cust_name, 
            PREDICTION(campaign_model USING *) as responder,
            SUM(CASE WHEN purchase_date < 15-Apr-2005 THEN
                purchase_amt ELSE 0 END) AS pre_purch,
            SUM(CASE WHEN purchase_date >= 15-Apr-2005 THEN
                purchase_amt ELSE 0 END) AS post_purch
     FROM customers, sales, products@PRODDB 
     WHERE sales.cust_id = customers.cust_id 
       AND purchase_date BETWEEN 15-Jan-2005 AND 14-Jul-2005
       AND sales.prod_id = products.prod_id
       AND CONTAINS(prod_description, 'DVD') > 0 
     GROUP BY cust_id, PREDICTION(campaign_model USING *);
    
  4. Evaluate the effectiveness and significance of the information you have obtained.

    Compare the success rate of predicted responders and non-responders within different regions and across the company. Is the success statistically significant?

    SELECT responder, cust_region, COUNT(*) AS cnt,
           SUM(post_purch – pre_purch) AS tot_increase,
           AVG(post_purch – pre_purch) AS avg_increase,
           STATS_T_TEST_PAIRED(pre_purch, post_purch) AS significance
    FROM (
     SELECT cust_name, cust_region
            PREDICTION(campaign_model USING *) AS responder,
            SUM(CASE WHEN purchase_date < 15-Apr-2005 THEN
                purchase_amt ELSE 0 END) AS pre_purch,
            SUM(CASE WHEN purchase_date >= 15-Apr-2005 THEN
                purchase_amt ELSE 0 END) AS post_purch
     FROM customers, sales, products@PRODDB 
     WHERE sales.cust_id = customers.cust_id 
       AND purchase_date BETWEEN 15-Jan-2005 AND 14-Jul-2005
       AND sales.prod_id = products.prod_id
       AND CONTAINS(prod_description, 'DVD') > 0 
     GROUP BY cust_id, PREDICTION(campaign_model USING *) )
    GROUP BY ROLLUP responder, cust_region ORDER BY 4 DESC;
    

Use Predictive Analytics to Create a Customer Profile

Predictive analytics, implemented in the DBMS_PREDICTIVE_ANALYTICS package, supports routines for making predictions, assessing attribute importance, and creating profiles. Example 1-3 shows how you could use predictive analytics to generate a customer profile.


Note:

With predictive analytics, you do not need to create a model. The routine dynamically creates and applies a model, which does not persist upon completion.


See Also:

Oracle Data Mining Concepts for an overview of Oracle predictive analytics

The PROFILE statement in Example 1-3 returns rules that suggest whether or not a customer is likely to use an affinity card. The rules are generated based on two predictors: customer gender and customer occupation. The rules are written as XML to a results table with these columns.

 Name                        Type
 -------------------------    ------------
 PROFILE_ID                   NUMBER
 RECORD_COUNT                 NUMBER
 DESCRIPTION                  XMLTYPE

The rule identifier is stored in PROFILE_ID. The number of cases described by the rule is stored in RECORD_COUNT. The XML that describes the rule is stored in the DESCRIPTION column.


Note:

This example uses sample data based on the SH schema. This data is used with the Data Mining sample programs. For information on the sample programs, see Oracle Data Mining Administrator's Guide.

Example 1-3 Generate a Customer Profile

--create a source view
CREATE VIEW cust_gend_occ_view AS
                 SELECT cust_gender, occupation, affinity_card
                 FROM mining_data_apply;

-- describe the source data
DESCRIBE cust_gend_occ_view
 Name                            Null?    Type
 ----------------------------------------------
 CUST_GENDER                     VARCHAR2(1)
 OCCUPATION                      VARCHAR2(21)
 AFFINITY_CARD                   NUMBER(10)

-- find the rules
BEGIN
    DBMS_PREDICTIVE_ANALYTICS.PROFILE(
         DATA_TABLE_NAME    => 'cust_gend_occ_view',
         TARGET_COLUMN_NAME => 'affinity_card',
         RESULT_TABLE_NAME  => 'profile_result');
END;
/

-- PROFILE has created 5 rules
SELECT profile_id from cust_gend_occ_profile_results;

PROFILE_ID
----------
         1
         2
         3
         4
         5

-- display the rules

<SimpleRule id="1" score="1" recordCount="275">
  <CompoundPredicate booleanOperator="and">
    <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
      <Array type="string">"Exec." "Prof." "Protec."
      </Array>
    </SimpleSetPredicate>
    <SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
      <Array type="string">"M"</Array>
    </SimpleSetPredicate>
  </CompoundPredicate>
<ScoreDistribution value="1" recordCount="146"/>
<ScoreDistribution value="0" recordCount="129"/>
</SimpleRule>

<SimpleRule id="2" score="0" recordCount="124">
  <CompoundPredicate booleanOperator="and">
    <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
      <Array type="string">"Exec." "Prof." "Protec."
      </Array>
    </SimpleSetPredicate>
    <SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
      <Array type="string">"F"
      </Array>
    </SimpleSetPredicate>
  </CompoundPredicate>
<ScoreDistribution value="0" recordCount="96"/>
<ScoreDistribution value="1" recordCount="28"/>
</SimpleRule>

<SimpleRule id="3" score="0" recordCount="397">
  <CompoundPredicate booleanOperator="and">
    <SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
      <Array type="string">"M"
      </Array>
    </SimpleSetPredicate>
    <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
      <Array type="string">"Crafts" "Sales" "TechSup" "Transp."
      </Array>
    </SimpleSetPredicate>
  </CompoundPredicate>
<ScoreDistribution value="0" recordCount="289"/>
<ScoreDistribution value="1" recordCount="108"/>
</SimpleRule>

<SimpleRule id="4" score="0" recordCount="316">
  <CompoundPredicate booleanOperator="and">
    <SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
      <Array type="string">"M"
      </Array>
    </SimpleSetPredicate>
    <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
      <Array type="string">
        "?" "Cleric." "Farming" "Handler" "House-s" "Machine" "Other"
      </Array>
    </SimpleSetPredicate>
  </CompoundPredicate>
<ScoreDistribution value="0" recordCount="277"/>
<ScoreDistribution value="1" recordCount="39"/>
</SimpleRule

<SimpleRule id="5" score="0" recordCount="388">
  <CompoundPredicate booleanOperator="and">
    <SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
      <Array type="string">
        "?" "Cleric." "Crafts" "Farming" "Handler" "House-s" "Machine" 
        "Other" "Sales" "TechSup" "Transp."
      </Array>
    </SimpleSetPredicate>
    <SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
      <Array type="string">"F"
      </Array>
    </SimpleSetPredicate>
  </CompoundPredicate>
<ScoreDistribution value="0" recordCount="363"/>
<ScoreDistribution value="1" recordCount="25"/>
</SimpleRule>
PKtbbPK-A OEBPS/toc.ncxr Oracle® Data Mining Application Developer's Guide, 11g Release 2 (11.2) Cover Table of Contents List of Examples List of Figures List of Tables Oracle Data Mining Application Developer's Guide, 11g Release 2 (11.2) Preface What's New in the Oracle Data Mining APIs? Data Mining API Use Cases A Tour of the Data Mining APIs Creating the Case Table Preparing Text for Mining Building a Model Scoring and Deployment The Data Mining Java API Index Copyright PKF<w r PK-AOEBPS/content.opf8& Oracle® Data Mining Application Developer's Guide, 11g Release 2 (11.2) en-US E12218-07 Oracle Corporation Oracle Corporation Oracle® Data Mining Application Developer's Guide, 11g Release 2 (11.2) 2011-06-30T14:01:10Z Discusses the programmatic interfaces to Oracle Data Mining. PK'}=&8&PK-A OEBPS/lof.htmn List of Figures PKXvPK-AOEBPS/dcommon/prodbig.gif GIF87a!!!)))111BBBZZZsss{{ZRRcZZ!!1!91)JB9B9)kkcJJB991ssc絽Zcc!!{祽BZc!9B!c{!)c{9{Z{{cZB1)sJk{{Z{kBsZJ91)Z{!{BcsRsBc{9ZZk甽kBkR!BZ9c)JJc{!))BZks{BcR{JsBk9k)Zck!!BZ1k!ZcRBZcZJkBk1Z9c!R!c9kZRZRBZ9{99!R1{99R{1!1)c1J)1B!BJRkk{ƽ絵ތkk絵RRs{{{{JJsssBBkkk!!9ss{{ZZssccJJZZRRccRRZZ))cBBJJ99JJ!!c11991199Z11!c!!))Z!!!1BRck{)!cJBkZRZ,HP)XRÇEZ֬4jJ0 @ "8pYҴESY3CƊ@*U:lY0_0#  5tX1E: C_xޘeKTV%ȣOΏ9??:a"\fSrğjAsKJ:nOzO=}E1-I)3(QEQEQEQEQEQEQE֝Hza<["2"pO#f8M[RL(,?g93QSZ uy"lx4h`O!LŏʨXZvq& c՚]+: ǵ@+J]tQ]~[[eϸ (]6A&>ܫ~+כzmZ^(<57KsHf妬Ϧmnẁ&F!:-`b\/(tF*Bֳ ~V{WxxfCnMvF=;5_,6%S>}cQQjsOO5=)Ot [W9 /{^tyNg#ЄGsֿ1-4ooTZ?K Gc+oyڙoNuh^iSo5{\ܹ3Yos}$.nQ-~n,-zr~-|K4R"8a{]^;I<ȤL5"EԤP7_j>OoK;*U.at*K[fym3ii^#wcC'IIkIp$󿉵|CtĈpW¹l{9>⪦׺*ͯj.LfGߍԁw] |WW18>w.ӯ! VӃ :#1~ +މ=;5c__b@W@ +^]ևՃ7 n&g2I8Lw7uҭ$"&"b eZ":8)D'%{}5{; w]iu;_dLʳ4R-,2H6>½HLKܹR ~foZKZ࿷1[oZ7׫Z7R¢?«'y?A}C_iG5s_~^ J5?œ tp]X/c'r%eܺA|4ծ-Ե+ْe1M38Ǯ `|Kյ OVڅu;"d56, X5kYR<̭CiطXԮ];Oy)OcWj֩}=܅s۸QZ*<~%뺃ȶp f~Bðzb\ݳzW*y{=[ C/Ak oXCkt_s}{'y?AmCjޓ{ WRV7r. g~Q"7&͹+c<=,dJ1V߁=T)TR՜*N4 ^Bڥ%B+=@fE5ka}ędܤFH^i1k\Sgdk> ֤aOM\_\T)8靠㡮3ģR: jj,pk/K!t,=ϯZ6(((((((49 xn_kLk&f9sK`zx{{y8H 8b4>ÇНE|7v(z/]k7IxM}8!ycZRQ pKVr(RPEr?^}'ðh{x+ՀLW154cK@Ng C)rr9+c:׹b Жf*s^ fKS7^} *{zq_@8# pF~ [VPe(nw0MW=3#kȵz晨cy PpG#W:%drMh]3HH<\]ԁ|_W HHҡb}P>k {ZErxMX@8C&qskLۙOnO^sCk7ql2XCw5VG.S~H8=(s1~cV5z %v|U2QF=NoW]ո?<`~׮}=ӬfԵ,=;"~Iy7K#g{ñJ?5$y` zz@-~m7mG宝Gٱ>G&K#]؃y1$$t>wqjstX.b̐{Wej)Dxfc:8)=$y|L`xV8ߙ~E)HkwW$J0uʟk>6Sgp~;4֌W+חc"=|ř9bc5> *rg {~cj1rnI#G|8v4wĿhFb><^ pJLm[Dl1;Vx5IZ:1*p)إ1ZbAK(1ׅ|S&5{^ KG^5r>;X׻K^? s fk^8O/"J)3K]N)iL?5!ƾq:G_=X- i,vi2N3 |03Qas ! 7}kZU781M,->e;@Qz T(GK(ah(((((((Y[×j2F}o־oYYq $+]%$ v^rϭ`nax,ZEuWSܽ,g%~"MrsrY~Ҿ"Fت;8{ѰxYEfP^;WPwqbB:c?zp<7;SBfZ)dϛ; 7s^>}⍱x?Bix^#hf,*P9S{w[]GF?1Z_nG~]kk)9Sc5Ո<<6J-ϛ}xUi>ux#ţc'{ᛲq?Oo?x&mѱ'#^t)ϲbb0 F«kIVmVsv@}kҡ!ˍUTtxO̧]ORb|2yԵk܊{sPIc_?ħ:Ig)=Z~' "\M2VSSMyLsl⺿U~"C7\hz_ Rs$~? TAi<lO*>U}+'f>7_K N s8g1^CeКÿE ;{+Y\ O5|Y{/o+ LVcO;7Zx-Ek&dpzbӱ+TaB0gNy׭ 3^c T\$⫫?F33?t._Q~Nln:U/Ceb1-im WʸQM+VpafR3d׫é|Aү-q*I P7:y&]hX^Fbtpܩ?|Wu󭏤ʫxJ3ߴm"(uqA}j.+?S wV ~ [B&<^U?rϜ_OH\'.;|.%pw/ZZG'1j(#0UT` Wzw}>_*9m>󑓀F?EL3"zpubzΕ$+0܉&3zڶ+jyr1QE ( ( ( ( ( ( ( (UIdC0EZm+]Y6^![ ԯsmܶ捆?+me+ZE29)B[;я*wGxsK7;5w)}gH~.Ɣx?X\ߚ}A@tQ(:ͧ|Iq(CT?v[sKG+*רqҍck <#Ljα5݈`8cXP6T5i.K!xX*p&ќZǓϘ7 *oƽ:wlຈ:Q5yIEA/2*2jAҐe}k%K$N9R2?7ýKMV!{W9\PA+c4w` Wx=Ze\X{}yXI Ү!aOÎ{]Qx)#D@9E:*NJ}b|Z>_k7:d$z >&Vv󃏽WlR:RqJfGإd9Tm(ҝEtO}1O[xxEYt8,3v bFF )ǙrPNE8=O#V*Cc𹾾&l&cmCh<.P{ʦ&ۣY+Gxs~k5$> ӥPquŽўZt~Tl>Q.g> %k#ú:Kn'&{[yWQGqF}AЅ׮/}<;VYZa$wQg!$;_ $NKS}“_{MY|w7G!"\JtRy+贾d|o/;5jz_6fHwk<ѰJ#]kAȎ J =YNu%dxRwwbEQEQEQEQEQEQEQEQEQE'fLQZ(1F)hQ@X1KEQE-Q@ 1KE3h=iPb(((1GjZ(-ʹRPbR@ 1KE7`bڒyS0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?l:ϊw "{{-3j3%{sj~2= 7 ~MڅKrHb|P3 r=Ҁ +Ş/$iu7=q2dԂxn⸷9$l]H #WI񯄴;\[ݚD8C3p&0U9^AnK vI+!I8>5(zqj03Y.X ,@85ߛ8>pq8=} hQEQ_,|O//.xim-0)/򭲒9]Q|G7Y ynI6#MéVʞ (Rgs$#3|1aǥl__r^_ik7<4\X2HX:[zޛ}:v%`$)' gVko-ıH^I$`I$$|YN;;iWwRgd0^#' N'I[cHU I9IQ<6\K0DF dOk :+xxM]>&fžQ0GOo^}PG@EݤK{Qc*< s@7zwp]ɝA GV+NӴ MϜ̌ pŇ}gYywx4r@c ~4b5[u['g.]3gzepZZǍO $< @(:}Avf\$QW,o;8,.໵;&A"6  88 €,QEQEQEQEQEQEQEQEQEQE1Ѷ_ .%"F [rI'5?0Tqj,Qu̻#8ӞsGÍ{F~.?TPα ]o]nj2v>¢6sTm}O3;sߓ9z<9^Y1aA' .bew`g(: ~Ѥɞ2kzP>k/Hqרxo߅|#_d# ?%(H$a؎?*6LwBD26eo Dqܰe#rr1MI2 A~/viQQ"<x#$;h;Nc}MZ$>m+{m{Lռ'֑\[lށ83ZI熿k }2S,T ţWѵH,! F. ~>Cf59$ryٷO& N9Ar3> {?xkV)kco|,mbNY 2y8uO<5`_C²訫<# "k Ry#Xaڣ*A|tC²訨?k@ස_riז6]<b``=f_gj7]4MI%h1$ $$ևxW_)%$B(9IaY?TUk5)o|v<0Q pF>\IaY?TTx{Nş A{[ /{94y.UICԱFWb0@0Ad^+oV^$ =;&YX ~c˕$'nxIugkOۭ/mݻoU݌9Er>Y|A^2?oWF9dD+$۸۵W$#o9ᥧ,4G)$$w,pHl/gz>\Ajz4F9zŰ۹YۓEl<7n漂@)H$99 ]U{}3N˵Jw@,Q}<[6 @u` ^ǘs,|tn- qChWh҇|]JlU\Rx|9^'÷Zm/!PB 6|&g%VLoxd3 }ON̵&GZ_|W_Ț-$V̲ cq#L<'-C@XTUY͒w=}Ooi~; \*6IE;<@:᩵ 4CIFȸqf%mʑ߃ğ|u%։u\"FO˹[93eP_XjVo-qY\,0Urxd}6n.a;2pH;K<=GL/ Njad&Yq%H9/q'%YYO^,k %f|U~S0r1sƾ$m ~\QA\"ܢ>ѓVNqV>+|O4VR{TKiVeDaʷV#c?.xٺ(^a;$r8z<oú_Ϫ_E(w Hc]O`Hpi*8m yY˿ݍqszW? K ;q+( zno03haX r(뛉gG.;A'<* =vȼ}rY h F#o$ԄWAEg:95{/m['dɝ7)ꭂpgXw_2_zW.d v#ʺ(/|/.5&;B$xi9(q,Mw@x2C#|E;Cc#Z( 6fmagkkC n'j(FO'b(5.K^! k6};}kb(?[4:,gEv 9R6fmagkkC n'j(FO'b߅oXhvdS3'e'ʋ h֞(,{5{3yw N(\^GZD̛܌a'W4M;Ú<No{7yqog۹Xy$kB߅oXhvdS3'e'ʋ h֞(,{5{3yw N(\^GZD̛܌a'W4M;Ú<No{7yqog۹Xy$kB޿_O#SW{y),^ _qAy Hkƺ/{tEP!FYͺOj,9bF1=KZpNdIX.I, I85cMtݭ>r+!@>€.U=WKִ6${K*$e7!d P=+J}3L6EtQ'$$jP>mJ/ ?_j7MSq;7g'v37?1ϓ9⍆aj2gi2\z`0׸U;='M.,Ki}̐¨6Iː2,NOoFYQK;@.i$a$f Z*E5tCuo-QRHPF Ab<᷁5>:ܑfG l.!2sנxot=" I$iHAW{~PvkbL KX#pIjc75?(SxPяZ6sayku2n#r0!G# b4M;Ú<No{7yqog۹Xy$j|+xZd.xA;\a;FpFqlQ@~:v]& ¡Vd wFv`LӑQ|iKB=F=畃)T:ӵWm)5kͶn3!VQBā8>oQ9u FPyx8钅,qjEE^^?8Q+qxDubMCOn4fCQ qF7|,}Gׇ,;,4ň\Ǎ8HF\A(+jږ㯈Kh晝a_6qF AW<-kG׈iA.iw*(5㯈?k[_M3"#cfs/L okoee0*mUiAPw9k_tk3iz] [5hT2c\߈|'`? (jEE@ |Ohr>Wmwp:{a^?J qQFּqod sqNTlpW($1djEEUK95_ڭye‚p9!N*q0r,~?O5 `,[k_BE|cqh'uVV%㒻XL qI_h>'F}f)] jf*mEa;__;J֕/un/EpÿNnPX)n9w`gR[_ƶ(57^ׂ%O`?Z?u[x_^Ho2=BF\QcI q9]{FӮxcT6AeoVʖcd#3@r3_ZQ6Q^m_|rfv 6A. ʅpYԐ P|pQ.e}?&ںܪv6NYc\`rTO'UZ((((((((((PTz uGk~ydt\ۜV8?ZP[?^RE "eW$;2DAEv=|ގ$lH"Q\xI+s~ׄ|áZI&CMB2ܖ83]|ÿhvŮj,@Y Uqc$ǒ0=@'9RG-C:ג6=;veP|.98Y⏂N]]󽌪f8啕<%9&x^m'_6w008ޱ$`DC><;c^ #I59[-/o!Babv*st7?i^JږUh%QWwLak4 QZ=GjQD,pb8'[x~)zof,+0uCro4/t©c?mB{k#ȫ<=G8+< uߍ.$PQ3 8F]5{ P(>e>bAj7߈t* 23j|'`?<'^ &aI-Բ4H8\HP qė oyxYơanm]|H2nsGAtQErz>֎y@BQe>_!Wi%WGVc^'%I,\HTq}͒`-WOKyI"*Y Iq;NWa/D^e\sy^uI ji۵ƗZ_@QeP#8 Twbxz];NhocnwC4g@+3ዏ : %{&c-Q~DBAs(S?xrCxnox]\`GU/CcaSm+|A-sƫWmzڦwMT/3>VO#]PdFRpf2pO 2dgiѦ[fuf UWjv/:x\ҵO(\.VJd) PH|{>ϻSԼ TIUW z#' *E-|]#4CO5GE.ۦ;WKM 8 7z3IEmۿb݌gMhQEQEQEQEQEQEQEQEQEQEQ^Wwľ(ѵ ~㱟WݚHQԶ ܬ@A߽Sg 6}Z?ϒ/^{5N?WeX/-~n { ܲ6d滊((+еmJo7\Z4bFoʦp܁תPEPEPEPUm=:?2'dF`C FA=*hw4x4&0nϷs<$IօPE~*Ω;?Lm"bRbG;fPQ1A=RWYkzVGtێpI#{C}K*dW=UH A(B+B {DoF?ppt| ]fTtn亝e( fQNqɮo?IoOow!~>fosQ^oS:ϋy^}=AW< 2Տ^@)35ƕHy7:q }zz5?wyWZ}>7;F$EPExu|.o+즞&HpUpqkCk6$hWـ$+X((((((+ï^k$#7>G+|bgk((((((((((g_I4ϴ[8zWA}6rO=싌A$ y#nu(]MHPex 1]ƫq`mɷϴc=C+Ђ F,|M6O0x3'cW>կj)b@Ó@_K9&EɾCo7Jj:Gs|0v:V6F1~qGˆ'?k7-[&LDYc#$O{mG=ϲ0LE%)ۗu*%O65KN(]Th"VoMmӠ`CHڭUnpO |_ }RWT6˿$ w{?f{iqxgk_3rYU68'x⏈ockO:rLN *~f ui9ͧDn]P![vIȕO$ <ែ_[Fu=>J.s))*|i#8ڹ< Fua'4Z&Kԑ1 Ppy5f,%JQ$؏7[*x/ϊ巸RHIY]HAb:>F10DơVU@@ ~9@%W/i~n$#av22ݳܐ?/Yc7'u%!Ÿiyڠy*8Fï\xW6nwfAXA\| k:GIp(9RTal}b <-Gj^߆/olg?ӎ}?%mr絻>\HKH8sp<72QEx$P** IaY?TUAO'UZ6!J#O<5`_QEWbOxAm]u"8 FX!g \gwOE^?oe8lxo>;Uws}7{%wRy۞I< Wi_j;_oϰW7yoܭ:z {Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@< _|1h>Wm6pzWaE"xM~uF#r^G*wݷ>>\cKv6ʲ8{0 Aآg}Ǘݿw?m{۝cKv6ʲ8{0 Aآ3u1;˨xq~` Rz7⟇$׼Gw|CtYlI,"%Qk(~k5[u+˴v!f8gWi6si5ܗ2gt̪sNIz5r{>$䳿ɍ #`2|ZOh/,VkbocxЏ )n0F;WQ@1 /}^_3nFs{ֆbx{L|;6[yv؁wc'qZP鿳ޥ\5Ɨ 4m8%fV*Y?){k6~u{kiJ E\ y$ 5Şm3S*n1[OP7QbP ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?PK ppPK-AOEBPS/dcommon/contbig.gif`GIF87a!!!111999BBBJJJRRRccckkksss{{{skk{{ZRRRJJƽ{sZRJRJB91)kcZB9)sskZRJ1޽ƽ{{ssskkkcƵZZRccZRRJJJB{BB9991ssckkZccR))!RRB!!JJ1))99!11ƌ)1R)k֔)s1RZJR{BJs9R1J!11J1J9k{csZk!1J!)cBR9J1B)91B!cRs{!)s!){1B!k!s!{ksksckckZc9B)1!)!)BJ9B1919έƌ!!)JJcZZ{!!!1RR{JJsBBkJJ{!!9BB{1!!J9)!!Z!!c1!!kR!!s9Z!BckJs)19!!c!!ZRZ,H rrxB(Kh" DժuICiи@S z$G3TTʖ&7!f b`D 0!A  k,>SO[!\ *_t  Exr%*_}!#U #4 & ֩3|b]L ]t b+Da&R_2lEٱZ`aC)/яmvUkS r(-iPE Vv_{z GLt\2s!F A#葡JY r|AA,hB}q|B`du }00(䡆<pb,G+oB C0p/x$…– ]7 @2HFc ) @AD \0 LHG',(A` `@SC)_" PH`}Y+_|1.K8pAKMA @?3҄$[JPA)+NH I ,@8G0/@R T,`pF8Ѓ)$^$ DDTDlA@ s;PKPK-AOEBPS/dcommon/darbbook.cssPKPK-A!OEBPS/dcommon/O_signature_clr.JPG"(JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?O '~MQ$Vz;OlJi8L%\]UFjޙ%ԯS;rA]5ފ<׈]j7Ouyq$z'TQuw7Ŀ KX߁M2=S'TQt?.5w'97;~pq=" ~k?`'9q6 E|yayM^Om'fkC&<5x' ?A?Zx'jß={=SßM gVC.5+Hd֪xc^)Җufz{Cީ|D Vkznq|+Xa+{50rx{|OG.OϞ~f/ xxX[2H )c+#jpUOZYX\=SG ߨC|K@;_߆'e?LT?]:?>w ڔ`D^So~xo[Ӡ3i7B:Q8 Vc-ďoi:FM292~y_*_闱YN\Fr=xZ3鳎OwW_QEzW~c]REeaSM}}Hӏ4&.E]u=gMѠ+mF`rNn$w9gMa꺢nTuhf2Xv>އ a(Û6߭?<=>z'TQuw7Ŀ KX߁M2=S'TQt?.5Kko\.8S$TOX߀Gw?Zx汴X)C7~.i6(Щ=+4{mGӭ¸-]&'t_kV*I<1)4thtIsqpQJ+> \m^[aJ5)ny:4o&QEnyAEPEEss 72,PDۢ׃K W{Wjr+wگ iM/;pd?~&?@;7E4gv8 $l'z'TQuw7Ŀ Gֱ=ɿ&G?. iR(5W*$|?w᫼gkmIbHe/_t>tg%y.l}N5[]+Mk0ĠeHdPrsst'UiC,y8`V%9ZIia|ܪvi מYG,o}+kk{YbyIeb*sAtի82zWoEK5z*o-eo;n(P u-I)4Š(HQEQEQEQEhz(X/Đ?}Bk˩ ݏrk0]4>8XzV? }6$}d^F>nU K ?Bտk_9׾x~w'ߞ  uDŽtL ؈5c-E/"|_Oo.IH쐍=i*Iw5(ںw?t5s.)+tQ2dUt5Vĺ.jZ"@IRrZƅY4ߡ_;}ų(KyQf1Aǵt?sZg+?F5_oQR&Dg߿]6FuRD u>ڿxl7?IT8'shj^=.=J1rj1Wl$얲cPx;E,p$֟ˏkw qg"45(ǛkV/=+ũ)bYl~K#˝J_כ5&\F'I#8/|wʾ_Xj Q:os^T1.M_|TO.;?_  jF?g N 8nA2F%i =qW,G=5OU u8]Rq?wr'˻S+۾.ܼ 87Q^elo/T*?L|ۚ<%<,/v_OKs B5f/29n0=zqQq(ª=VX@*J(э(f5qJN_EVǞQEOuoѕOuoa5}gO?:߂8Wא|cڽ~]N&O( (<]>͠@VQ=^~U ̴m&\խ5i:}|}r~9՝f}_>'vVֲ$~^f30^in{\_.O F8to}?${φ|#x^#^n~w=~k~?'KRtO.㌡h![3Zu*ٷճ(ԟ]z_/W1(ԟ]v~g|Yq<ז0 ; b8֮s,w9\?uEyStKaª@\,)) (!EPEPEPEPEPzѧts{v>C/"N6`d*J2gGӧWqBq_1ZuΓ\X]r?=Ey88Mp&pKtO-"wR2 K^-Z< \c>V0^@O7x2WFjs<׻kZ(<Т(OFw/6$1[:ޯԯ#q~4|,LVPem=@=YLUxӃV}AUbcUB.Ds5*kٸAeG>PJxt͝ b88?*$~@ׯD VkraiJs}Q.20x&mXξ,Z]“A-J#`+-E/"<]\a'tZGy.(|lދ~gMK OZdxDŽU9T6ϯ^<Ϡt5CZ]].t۫S=s`ڳ%8iVK:nqe+#<.T6U>zWoy3^I {F?J~=G}k)K$$;$de8*G Uӟ4Ocºw}|]4=ݣ\x$ʠms?q^ipw\"ȿPs^Z Q_0GڼU.t}ROM[G#]8wٞ ӫ87}Cgw vHȩBM55vof =A_٭`Ygx[6 P,5}>蚊(0(+?>+?> k|TuXq6_ +szk :u_ Z߶Ak_U}Jc2u/1[_»ݸG41-bሬ۴}}Eȹפ_c?5gi @cL\L<68hF_Ih>X4K7UТ sMj =J7CKo>Օ5s:߀t ~ηaٿ?|gdL8+gG%o?x`دOqȱwc¨&TW_V_aI=dpG!wu۞սZ1yL50$(l3(:~'ַo A}a3N*[0ǭ HKQV}G@֜$ 9of$ArNqUOgË05#m?D)^_h//5_/<?4}Jį+GkpG4"$ r| >S4Ђ"S 1%R:ȝ 8;PKPz PK-AOEBPS/dcommon/feedback.gif7GIF89a'%(hp|fdx?AN5:dfeDGHɾTdQc`g*6DC\?ؘ||{;=E6JUՄfeA= >@,4`H.|`a (Q 9:&[|ځ,4p Y&BDb,!2@, $wPA'ܠǃ@CO~/d.`I @8ArHx9H75j L 3B/` P#qD*s 3A:3,H70P,R@ p!(F oԥ D;"0 ,6QBRɄHhI@@VDLCk8@NBBL2&pClA?DAk%$`I2 #Q+l7 "=&dL&PRSLIP)PɼirqМ'N8[_}w;PK-PK-AOEBPS/dcommon/booklist.gifGIF89a1޵֥΄kZ{Jk1Rs!BZ)B),@I9Z͓Ca % Dz8Ȁ0FZЌ0P !x8!eL8aWȠFD(~@p+rMS|ӛR$ v "Z:]ZJJEc{*=AP  BiA ']j4$*   & 9q sMiO?jQ = , YFg4.778c&$c%9;PKː5PK-AOEBPS/dcommon/cpyr.htm1 Oracle Legal Notices

Oracle Legal Notices

Copyright Notice

Copyright © 1994-2012, Oracle and/or its affiliates. All rights reserved.

Trademark Notice

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

License Restrictions Warranty/Consequential Damages Disclaimer

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

Warranty Disclaimer

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

Restricted Rights Notice

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

Hazardous Applications Notice

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Third-Party Content, Products, and Services Disclaimer

This software or hardware and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.

Alpha and Beta Draft Documentation Notice

If this document is in prerelease status:

This documentation is in prerelease status and is intended for demonstration and preliminary use only. It may not be specific to the hardware on which you are using the software. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to this documentation and will not be responsible for any loss, costs, or damages incurred due to the use of this documentation.

Oracle Logo

PKN61PK-AOEBPS/dcommon/masterix.gif.GIF89a1ޜΌscJk1Rs!Bc1J),@IS@0"1 Ѿb$b08PbL,acr B@(fDn Jx11+\%1 p { display: none; } /* Class Selectors */ .ProductTitle { font-family: sans-serif; } .BookTitle { font-family: sans-serif; } .VersionNumber { font-family: sans-serif; } .PrintDate { font-family: sans-serif; font-size: small; } .PartNumber { font-family: sans-serif; font-size: small; } PKeӺ1,PK-AOEBPS/dcommon/larrow.gif#GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШtpHc`  өb[.64ꑈ53=Z]'yuLG*)g^!8C?-6(29K"Ĩ0Яl;U+K9^u2,@@ (\Ȱ Ë $P`lj 8x I$4H *(@͉0dа8tA  DсSP v"TUH PhP"Y1bxDǕ̧_=$I /& .)+ 60D)bB~=0#'& *D+l1MG CL1&+D`.1qVG ( "D2QL,p.;u. |r$p+5qBNl<TzB"\9e0u )@D,¹ 2@C~KU 'L6a9 /;<`P!D#Tal6XTYhn[p]݅ 7}B a&AƮe{EɲƮiEp#G}D#xTIzGFǂEc^q}) Y# (tۮNeGL*@/%UB:&k0{ &SdDnBQ^("@q #` @1B4i@ aNȅ@[\B >e007V[N(vpyFe Gb/&|aHZj@""~ӎ)t ? $ EQ.սJ$C,l]A `8A o B C?8cyA @Nz|`:`~7-G|yQ AqA6OzPbZ`>~#8=./edGA2nrBYR@ W h'j4p'!k 00 MT RNF6̙ m` (7%ꑀ;PKl-OJPK-AOEBPS/dcommon/index.gifGIF89a1޵ΥΥ{sc{BZs,@IM" AD B0 3.R~[D"0, ]ШpRNC  /& H&[%7TM/`vS+-+ q D go@" 4o'Uxcxcc&k/ qp zUm(UHDDJBGMԃ;PK(PK-AOEBPS/dcommon/bookbig.gif +GIF89a$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9B!& Imported from GIF image: bookbig.gif,$!!!)))111999BBBJJJRRRZZZccckkksss{{{skkB991)))!!B11))1!JB9B9!!cZ9ƭƽssk{ZZRccZRRJJJBBB9c!!ν)1)k{s絽ƌkssֽZccJRRBJJ{9BB)11)99!!))11!!k!JZ!)RcJccBcs)1c)JZ!BR!)BZ)99J!Rk9!c11B)Z{)9Bkc1kB9BZ!Z{9Rs)Jkksk9kB1s1Jk9Rƥc{k9s)Z{1k91)s1Rk)Jc1J!))BZ!1k{csc{)19B!)Bcsc{ksc{kZs!RkJkJkքc{9Zks{ck9R)Bks9R9R1J!)Z1B!)c)9)99BR19kksBBJcc{ccBBZ))9kk!!199c11ZBB{9!!R!!Z!!c))!!kR!!s!!BcksRZ1c9B)R91c1)Z!R9B9k1)RcZ{)!1B9JB9B)!)J9BH`\Ȑ:pظа"A6DBH,V@Dڹ'G"v Æ ܥ;n;!;>xAܽ[G.\rQC wr}BŊQ A9ᾑ#5Y0VȒj0l-GqF>ZpM rb ;=.ސW-WѻWo ha!}~ْ ; t 53 :\ 4PcD,0 4*_l0K3-`l.j!c Aa|2L4/1C`@@md;(H*80L0L(h*҇҆o#N84pC (xO@ A)J6rVlF r  fry†$r_pl5xhA+@A=F rGU a 1х4s&H Bdzt x#H%Rr (Ѐ7P`#Rщ'x" #0`@~i `HA'Tk?3!$`-A@1l"P LhʖRG&8A`0DcBH sq@AXB4@&yQhPAppxCQ(rBW00@DP1E?@lP1%T` 0 WB~nQ@;PKGC PK-AOEBPS/dcommon/rarrow.gif/GIF87a絵ƌֵƽ{{ss֜ƔZZ{{{{ZZssZZccJJJJRRBBJJJJ991111))!!{,@pH,Ȥrl:ШLlԸ NCqWEd)#34vwwpN|0yhX!'+-[F 'n5 H $/14w3% C .90" qF 7&E "D mnB|,c96) I @0BW{ᢦdN p!5"D`0 T 0-]ʜ$;PKJV^PK-AOEBPS/dcommon/mix.gifkGIF89aZZZBBBJJJkkk999sss!!!111cccֽ{{{RRR)))猌ƭ{s{sks!,@@pH,B$ 8 t:<8 *'ntPP DQ@rIBJLNPTVEMOQUWfj^!  hhG H  kCúk_a Ǥ^ h`B BeH mm  #F` I lpǎ,p B J\Y!T\(dǏ!Gdˆ R53ټ R;iʲ)G=@-xn.4Y BuU(*BL0PX v`[D! | >!/;xP` (Jj"M6 ;PK枰pkPK-AOEBPS/dcommon/doccd_epub.jsM /* Copyright 2006, 2012, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2012.3.17 */ function addLoadEvent(func) { var oldOnload = window.onload; if (typeof(window.onload) != "function") window.onload = func; else window.onload = function() { oldOnload(); func(); } } function compactLists() { var lists = []; var ul = document.getElementsByTagName("ul"); for (var i = 0; i < ul.length; i++) lists.push(ul[i]); var ol = document.getElementsByTagName("ol"); for (var i = 0; i < ol.length; i++) lists.push(ol[i]); for (var i = 0; i < lists.length; i++) { var collapsible = true, c = []; var li = lists[i].getElementsByTagName("li"); for (var j = 0; j < li.length; j++) { var p = li[j].getElementsByTagName("p"); if (p.length > 1) collapsible = false; for (var k = 0; k < p.length; k++) { if ( getTextContent(p[k]).split(" ").length > 12 ) collapsible = false; c.push(p[k]); } } if (collapsible) { for (var j = 0; j < c.length; j++) { c[j].style.margin = "0"; } } } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(compactLists); function processIndex() { try { if (!/\/index.htm(?:|#.*)$/.test(window.location.href)) return false; } catch(e) {} var shortcut = []; lastPrefix = ""; var dd = document.getElementsByTagName("dd"); for (var i = 0; i < dd.length; i++) { if (dd[i].className != 'l1ix') continue; var prefix = getTextContent(dd[i]).substring(0, 2).toUpperCase(); if (!prefix.match(/^([A-Z0-9]{2})/)) continue; if (prefix == lastPrefix) continue; dd[i].id = prefix; var s = document.createElement("a"); s.href = "#" + prefix; s.appendChild(document.createTextNode(prefix)); shortcut.push(s); lastPrefix = prefix; } var h2 = document.getElementsByTagName("h2"); for (var i = 0; i < h2.length; i++) { var nav = document.createElement("div"); nav.style.position = "relative"; nav.style.top = "-1.5ex"; nav.style.left = "1.5em"; nav.style.width = "90%"; while (shortcut[0] && shortcut[0].toString().charAt(shortcut[0].toString().length - 2) == getTextContent(h2[i])) { nav.appendChild(shortcut.shift()); nav.appendChild(document.createTextNode("\u00A0 ")); } h2[i].parentNode.insertBefore(nav, h2[i].nextSibling); } function getTextContent(e) { if (e.textContent) return e.textContent; if (e.innerText) return e.innerText; } } addLoadEvent(processIndex); PKo"nR M PK-AOEBPS/dcommon/toc.gifGIF89a1ΥΥ{c{Z{JkJk1Rk,@IK% 0| eJB,K-1i']Bt9dz0&pZ1o'q(؟dQ=3S SZC8db f&3v2@VPsuk2Gsiw`"IzE%< C !.hC IQ 3o?39T ҍ;PKv I PK-AOEBPS/dcommon/topnav.gifGIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)-'KR$&84 SI) XF P8te NRtHPp;Q%Q@'#rR4P fSQ o0MX[) v + `i9gda/&L9i*1$#"%+ ( E' n7Ȇ(,҅(L@(Q$\x 8=6 'נ9tJ&"[Epljt p#ѣHb :f F`A =l|;&9lDP2ncH R `qtp!dȐYH›+?$4mBA9 i@@ ]@ꃤFxAD*^Ŵ#,(ε  $H}F.xf,BD Z;PK1FAPK-AOEBPS/dcommon/bp_layout.css# @charset "utf-8"; /* bp_layout.css Copyright 2007, Oracle and/or its affiliates. All rights reserved. */ body { margin: 0ex; padding: 0ex; } h1 { display: none; } #FOOTER { border-top: #0d4988 solid 10px; background-color: inherit; color: #e4edf3; clear: both; } #FOOTER p { font-size: 80%; margin-top: 0em; margin-left: 1em; } #FOOTER a { background-color: inherit; color: gray; } #LEFTCOLUMN { float: left; width: 50%; } #RIGHTCOLUMN { float: right; width: 50%; clear: right; /* IE hack */ } #LEFTCOLUMN div.portlet { margin-left: 2ex; margin-right: 1ex; } #RIGHTCOLUMN div.portlet { margin-left: 1ex; margin-right: 2ex; } div.portlet { margin: 2ex 1ex; padding-left: 0.5em; padding-right: 0.5em; border: 1px #bcc solid; background-color: #f6f6ff; color: black; } div.portlet h2 { margin-top: 0.5ex; margin-bottom: 0ex; font-size: 110%; } div.portlet p { margin-top: 0ex; } div.portlet ul { list-style-type: none; padding-left: 0em; margin-left: 0em; /* IE Hack */ } div.portlet li { text-align: right; } div.portlet li cite { font-style: normal; float: left; } div.portlet li a { margin: 0px 0.2ex; padding: 0px 0.2ex; font-size: 95%; } #NAME { margin: 0em; padding: 0em; position: relative; top: 0.6ex; left: 10px; width: 80%; } #PRODUCT { font-size: 180%; } #LIBRARY { color: #0b3d73; background: inherit; font-size: 180%; font-family: serif; } #RELEASE { position: absolute; top: 28px; font-size: 80%; font-weight: bold; } #TOOLS { list-style-type: none; position: absolute; top: 1ex; right: 2em; margin: 0em; padding: 0em; background: inherit; color: black; } #TOOLS a { background: inherit; color: black; } #NAV { float: left; width: 96%; margin: 3ex 0em 0ex 0em; padding: 2ex 0em 0ex 4%; /* Avoiding horizontal scroll bars. */ list-style-type: none; background: transparent url(../gifs/nav_bg.gif) repeat-x bottom; } #NAV li { float: left; margin: 0ex 0.1em 0ex 0em; padding: 0ex 0em 0ex 0em; } #NAV li a { display: block; margin: 0em; padding: 3px 0.7em; border-top: 1px solid gray; border-right: 1px solid gray; border-bottom: none; border-left: 1px solid gray; background-color: #a6b3c8; color: #333; } #SUBNAV { float: right; width: 96%; margin: 0ex 0em 0ex 0em; padding: 0.1ex 4% 0.2ex 0em; /* Avoiding horizontal scroll bars. */ list-style-type: none; background-color: #0d4988; color: #e4edf3; } #SUBNAV li { float: right; } #SUBNAV li a { display: block; margin: 0em; padding: 0ex 0.5em; background-color: inherit; color: #e4edf3; } #SIMPLESEARCH { position: absolute; top: 5ex; right: 1em; } #CONTENT { clear: both; } #NAV a:hover, #PORTAL_1 #OVERVIEW a, #PORTAL_2 #OVERVIEW a, #PORTAL_3 #OVERVIEW a, #PORTAL_4 #ADMINISTRATION a, #PORTAL_5 #DEVELOPMENT a, #PORTAL_6 #DEVELOPMENT a, #PORTAL_7 #DEVELOPMENT a, #PORTAL_11 #INSTALLATION a, #PORTAL_15 #ADMINISTRATION a, #PORTAL_16 #ADMINISTRATION a { background-color: #0d4988; color: #e4edf3; padding-bottom: 4px; border-color: gray; } #SUBNAV a:hover, #PORTAL_2 #SEARCH a, #PORTAL_3 #BOOKS a, #PORTAL_6 #WAREHOUSING a, #PORTAL_7 #UNSTRUCTURED a, #PORTAL_15 #INTEGRATION a, #PORTAL_16 #GRID a { position: relative; top: 2px; background-color: white; color: #0a4e89; } PK3( # PK-AOEBPS/dcommon/bookicon.gif:GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ޭ{{ZRRcZZRJJJBB)!!skRB9{sν{skskcZRJ1)!֭ƽ{ZZRccZJJBBB999111)JJ9BB1ZZB!!ﭵBJJ9BB!!))Jk{)1!)BRZJ{BsR!RRJsJ!J{s!JsBkks{RsB{J{c1RBs1ZB{9BJ9JZ!1BJRRs!9R!!9Z9!1)J19JJRk19R1Z)!1B9R1RB!)J!J1R)J119!9J91!9BkksBBJ119BBR!))9!!!JB1JJ!)19BJRZckތ1)1J9B,H*\hp >"p`ƒFF "a"E|ժOC&xCRz OBtX>XE*O>tdqAJ +,WxP!CYpQ HQzDHP)T njJM2ꔀJ2T0d#+I:<жk 'ꤱF AB @@nh Wz' H|-7f\A#yNR5 /PM09u UjćT|q~Yq@&0YZAPa`EzI /$AD Al!AAal 2H@$ PVAB&c*ؠ p @% p-`@b`uBa l&`3Ap8槖X~ vX$Eh`.JhAepA\"Bl, :Hk;PKx[?:PK-AOEBPS/dcommon/conticon.gif^GIF87a!!!)))111999BBBJJJRRRZZZccckkksss{{{ZRR޽{{ssskkkcccZ991ccRZZBBJJZck)19ZcsBJZ19J!k{k)Z1RZs1!B)!J91{k{)J!B!B911)k{cs!1s!9)s!9!B!k)k1c!)Z!R{9BJcckZZcBBJ99B119{{!!)BBRBBZ!))999R99Z!!999c1!9!)19B1)!B9R,  oua\h2SYPa aowwxYi 9SwyyxxyYSd $'^qYȵYvh ч,/?g{н.J5fe{ڶyY#%/}‚e,Z|pAܠ `KYx,ĉ&@iX9|`p ]lR1khٜ'E 6ÅB0J;t X b RP(*MÄ!2cLhPC <0Ⴁ  $4!B 6lHC%<1e H 4p" L`P!/,m*1F`#D0D^!AO@..(``_؅QWK>_*OY0J@pw'tVh;PKp*c^PK-AOEBPS/dcommon/blafdoc.cssL@charset "utf-8"; /* Copyright 2002, 2011, Oracle and/or its affiliates. All rights reserved. Author: Robert Crews Version: 2011.10.7 */ body { font-family: Tahoma, sans-serif; /* line-height: 125%; */ color: black; background-color: white; font-size: small; } * html body { /* http://www.info.com.ph/~etan/w3pantheon/style/modifiedsbmh.html */ font-size: x-small; /* for IE5.x/win */ f\ont-size: small; /* for other IE versions */ } h1 { font-size: 165%; font-weight: bold; border-bottom: 1px solid #ddd; width: 100%; } h2 { font-size: 152%; font-weight: bold; } h3 { font-size: 139%; font-weight: bold; } h4 { font-size: 126%; font-weight: bold; } h5 { font-size: 113%; font-weight: bold; display: inline; } h6 { font-size: 100%; font-weight: bold; font-style: italic; display: inline; } a:link { color: #039; background: inherit; } a:visited { color: #72007C; background: inherit; } a:hover { text-decoration: underline; } a img, img[usemap] { border-style: none; } code, pre, samp, tt { font-family: monospace; font-size: 110%; } caption { text-align: center; font-weight: bold; width: auto; } dt { font-weight: bold; } table { font-size: small; /* for ICEBrowser */ } td { vertical-align: top; } th { font-weight: bold; text-align: left; vertical-align: bottom; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } td p:first-child, td pre:first-child { margin-top: 0px; margin-bottom: 0px; } table.table-border { border-collapse: collapse; border-top: 1px solid #ccc; border-left: 1px solid #ccc; } table.table-border th { padding: 0.5ex 0.25em; color: black; background-color: #f7f7ea; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } table.table-border td { padding: 0.5ex 0.25em; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } span.gui-object, span.gui-object-action { font-weight: bold; } span.gui-object-title { } p.horizontal-rule { width: 100%; border: solid #cc9; border-width: 0px 0px 1px 0px; margin-bottom: 4ex; } div.zz-skip-header { display: none; } td.zz-nav-header-cell { text-align: left; font-size: 95%; width: 99%; color: black; background: inherit; font-weight: normal; vertical-align: top; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-header-link { font-size: 95%; } td.zz-nav-button-cell { white-space: nowrap; text-align: center; width: 1%; vertical-align: top; padding-left: 4px; padding-right: 4px; margin-top: 0ex; padding-top: 0ex; } a.zz-nav-button-link { font-size: 90%; } div.zz-nav-footer-menu { width: 100%; text-align: center; margin-top: 2ex; margin-bottom: 4ex; } p.zz-legal-notice, a.zz-legal-notice-link { font-size: 85%; /* display: none; */ /* Uncomment to hide legal notice */ } /*************************************/ /* Begin DARB Formats */ /*************************************/ .bold, .codeinlinebold, .syntaxinlinebold, .term, .glossterm, .seghead, .glossaryterm, .keyword, .msg, .msgexplankw, .msgactionkw, .notep1, .xreftitlebold { font-weight: bold; } .italic, .codeinlineitalic, .syntaxinlineitalic, .variable, .xreftitleitalic { font-style: italic; } .bolditalic, .codeinlineboldital, .syntaxinlineboldital, .titleinfigure, .titleinexample, .titleintable, .titleinequation, .xreftitleboldital { font-weight: bold; font-style: italic; } .itemizedlisttitle, .orderedlisttitle, .segmentedlisttitle, .variablelisttitle { font-weight: bold; } .bridgehead, .titleinrefsubsect3 { font-weight: bold; } .titleinrefsubsect { font-size: 126%; font-weight: bold; } .titleinrefsubsect2 { font-size: 113%; font-weight: bold; } .subhead1 { display: block; font-size: 139%; font-weight: bold; } .subhead2 { display: block; font-weight: bold; } .subhead3 { font-weight: bold; } .underline { text-decoration: underline; } .superscript { vertical-align: super; } .subscript { vertical-align: sub; } .listofeft { border: none; } .betadraft, .alphabetanotice, .revenuerecognitionnotice { color: #e00; background: inherit; } .betadraftsubtitle { text-align: center; font-weight: bold; color: #e00; background: inherit; } .comment { color: #080; background: inherit; font-weight: bold; } .copyrightlogo { text-align: center; font-size: 85%; } .tocsubheader { list-style-type: none; } table.icons td { padding-left: 6px; padding-right: 6px; } .l1ix dd, dd dl.l2ix, dd dl.l3ix { margin-top: 0ex; margin-bottom: 0ex; } div.infoboxnote, div.infoboxnotewarn, div.infoboxnotealso { margin-top: 4ex; margin-right: 10%; margin-left: 10%; margin-bottom: 4ex; padding: 0.25em; border-top: 1pt solid gray; border-bottom: 1pt solid gray; } p.notep1 { margin-top: 0px; margin-bottom: 0px; } .tahiti-highlight-example { background: #ff9; text-decoration: inherit; } .tahiti-highlight-search { background: #9cf; text-decoration: inherit; } .tahiti-sidebar-heading { font-size: 110%; margin-bottom: 0px; padding-bottom: 0px; } /*************************************/ /* End DARB Formats */ /*************************************/ @media all { /* * * { line-height: 120%; } */ dd { margin-bottom: 2ex; } dl:first-child { margin-top: 2ex; } } @media print { body { font-size: 11pt; padding: 0px !important; } a:link, a:visited { color: black; background: inherit; } code, pre, samp, tt { font-size: 10pt; } #nav, #search_this_book, #comment_form, #comment_announcement, #flipNav, .noprint { display: none !important; } body#left-nav-present { overflow: visible !important; } } PKʍPK-AOEBPS/dcommon/rightnav.gif&GIF89a1ֽ筽ޭƔkZZk{Bc{,@ ) l)- $CҠҀ ! D1 #:aS( c4B0 AC8 ְ9!%MLj Z * ctypJBa H t>#Sb(clhUԂ̗4DztSԙ9ZQҀEPEPEPEPEPEPEPM=iԍP Gii c*yF 1׆@\&o!QY00_rlgV;)DGhCq7~..p&1c:u֫{fI>fJL$}BBP?JRWc<^j+χ5b[hֿ- 5_j?POkeQ^hֿ1L^ H ?Qi?z?+_xɔŪ\썽O]χ>)xxV/s)e6MI7*ߊޛv֗2J,;~E4yi3[nI`Ѱe9@zXF*W +]7QJ$$=&`a۾?]N T䏟'X)Ɣkf:j |>NBWzYx0t!* _KkoTZ?K Gc+UyڹgNuh^iSo5{\ܹ3Yos}.>if FqR5\/TӮ#]HS0DKu{($"2xִ{SBJ8=}Y=.|Tsц2UЫ%.InaegKo z ݎ3ֹxxwM&2S%';+I',kW&-"_¿_ Vq^ܫ6pfT2RV A^6RKetto^[{w\jPZ@ޢN4/XN#\42j\(z'j =~-I#:q[Eh|X:sp* bifp$TspZ-}NM*B-bb&*xUr#*$M|QWY ~p~- fTED6O.#$m+t$˙H"Gk=t9r娮Y? CzE[/*-{c*[w~o_?%ƔxZ:/5𨴟q}/]22p qD\H"K]ZMKR&\C3zĽ[PJm]AS)Ia^km M@dК)fT[ijW*hnu Ͳiw/bkExG£@f?Zu.s0(<`0ֹoxOaDx\zT-^ѧʧ_1+CP/p[w 9~U^[U<[tĽwPv[yzD1W='u$Oeak[^ |Gk2xv#2?¹TkSݕ| rݞ[Vi _Kz*{\c(Ck_܏|?u jVڔ6f t?3nmZ6f%QAjJf9Rq _j7Z-y.pG$Xb]0')[_k;$̭?&"0FOew7 z-cIX岛;$u=\an$ zmrILu uٞ% _1xcUW%dtÀx885Y^gn;}ӭ)場QEQ@Q@Q@Q@Q@Q@!4xPm3w*]b`F_931˜[ן+(> E ly;<;MF-qst+}DH @YKlLmؤciN<|]IU)Lw(8t9FS(=>og<\Z~u_+X1ylsj'eՃ*U3`C!N9Q_WܱhKc93^ua>H ƕGk=8~e#_?{ǀe-[2ٔ7;=&K挑5zsLdx(e8#{1wS+ΝVkXq9>&yஏh$zq^0~/j@:/«Vnce$$uoPp}MC{$-akH@ɫ1O !8R9s5ԦYmϧ'OUṡ5T,!Ԛ+s#1Veo=[)g>#< s)ƽُA^䠮ωFUj(ǩ|N3Jڷ睁ϱuږZYGOTsI<&drav?A^_f׻B$,O__ԿC`it{6>G׈C~&$y؎v1q9Sc1fH[ѽ>,gG'0'@Vw,BO [#>ﱺg5ΒFVD%Yr:O5 Tu+O멃]ی38Ze}R&ѝ_xzc1DXgس;<,_,{ƽY'AS#oF.M#~cBuEx7G+Y)(5q+GCV;qF+CLQ)qEC&6z𿊘z}?&w=+)??&\g{;V??׻xGœdٿ׼-Nc')3K]N)iLTӿCdb7Q^a N sd>Fz[0S^s'Zi 77D}kWus ab~~H(>.fif9,~|Jk;YN3H8Y(t6Q݉k͇_÷Z+2߄&[ +Tr^藺97~c܎=[f1RrBǓ^kEMhxYVm<[џ6| kqbѱ| YA{G8p?\UM7Z66 g1U1igU69 u5Pƪ:VVZC=[@ҹ¨$kSmɳО\vFz~i3^a Osŧυ9Q}_3 όO{/wgoet39 vO2ea;Ύ7$U#?k+Ek&dpzbӱ+TaB0gN{[N7Gי}U7&@?>Fz~E!a@s ?'67XxO*!?qi]֏TQN@tI+\^s8l0)2k!!iW8F$(yOּT.k,/#1:}8uT˾+5=O/`IW G֯b.-<= HOm;~so~hW5+kS8s.zwE| ?4ӿw/K N 9?j(#0UT` Wzw}:_*9m>󑓀F?ELzv=8q:=WgJ`nDr Zе<ֹ](Q@Q@Q@Q@Q@Q@Q@Q@ 'IdC0EYJVcMty_~u+Sw-aO n<[YJgL#6i g5ЖDZ14cʝ!!\/M}/_AYR__>oC? _?7_G#RERW쏞KB}JxGSkǕA pƱơP m]hwB7U$Zq M95"3q1ioATߚ{g.t uu2k=;h#YB= fgS :TdLԃ!44mFK{Hrd^7oz|BVr<{)6AXգV»|>*/hS܏z͆OM=Εq (s|s׊LKQI :9NJ)P+!ʣoAF>+=@I}"x/}۠1aנc¹4emC:>p_xWKX` >R3_S½èųp3޺u3N e یbmͺ<_ mnݮ1Op?Gm)Qb%N585'%Ahs\6yw!"&Ɨ._wk)}GP;Z!#\"< *oƾ\)}N>"լ/~]Lg}pBG X?<zZ#x69S=6) jzx=y9O&>+e!!? ?s~k5Gʏ)?*ce7Ox~k5􇔾Q/e7/Ԑ#3OgNC0] ;_FiRl>Q.g>!%k#ú:Kn'&}?U@\pџPtp)v<{_i}Oվֲ3XIYIx~b<D?(=_JXH=bbi=Oh?_ C_O)}oW쏜? %Ƶ;-RYFi`wۭ{ϖZMtQ$"c_+ԃx1*0b;ԕ݋ESQEQEQEQEQEQEQEQEQEQZ(1F)h1K@XLRE&9P (bf{RӨ&)PEPEPbԴPGKZ(iإbn(:A%S0(-&)P+ ڎԴP11F)h&:LRmQ@Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((PKje88PK-AOEBPS/dcommon/help.gif!GIF89a1εֵ֜֜{kZsBc{,@ )sƠTQ$8(4ʔ%ŌCK$A HP`$h8ŒSd+ɡ\ H@%' 6M HO3SJM /:Zi[7 \( R9r ERI%  N=aq   qƦs *q-n/Sqj D XZ;PKއ{&!PK-AOEBPS/xform_casetbl.htm Creating the Case Table

3 Creating the Case Table

This chapter explains how data is interpreted by Oracle Data Mining. It describes the requirements for a data mining case table, and it explains the notion of data attributes and model attributes. Data transformations are discussed in Oracle Data Mining Concepts.

This chapter contains the following sections:

Requirements

The data that you wish to mine must be defined within a single table or view. The information for each record must be stored in a separate row. The data records are commonly called cases. Each case can be identified by a unique case ID. The table or view itself is referred to as a case table.

The CUSTOMERS table in the SH schema is an example of a table that could be used for mining. All the information for each customer is contained in a single row. The case ID is the CUST_ID column. The rows listed in Example 3-1 are selected from SH.CUSTOMERS.

Example 3-1 Sample Case Table

SQL> select cust_id, cust_gender, cust_year_of_birth, 
           cust_main_phone_number from sh.customers where cust_id < 11;

CUST_ID CUST_GENDER CUST_YEAR_OF_BIRTH CUST_MAIN_PHONE_NUMBER
------- ----------- ---- ------------- -------------------------
1        M               1946          127-379-8954
2        F               1957          680-327-1419
3        M               1939          115-509-3391
4        M               1934          577-104-2792
5        M               1969          563-667-7731
6        F               1925          682-732-7260
7        F               1986          648-272-6181
8        F               1964          234-693-8728
9        F               1936          697-702-2618
10       F               1947          601-207-4099

Note:

Oracle Data Mining requires single-record case data for all types of models except association models, which can be built on native transactional data. See "Market Basket Data".

Column Data Types

The columns of the case table hold the attributes that describe each case. In Example 3-1, the attributes are: CUST_GENDER, CUST_YEAR_OF_BIRTH, and CUST_MAIN_PHONE_NUMBER. The attributes are the predictors in a supervised model and the descriptors in an unsupervised model. The case ID, CUST_ID, can be viewed as a special attribute; it is not a predictor or a descriptor.

Oracle Data Mining accepts the following column data types:


VARCHAR2, CHAR
NUMBER, FLOAT
DM_NESTED_CATEGORICALS
DM_NESTED_NUMERICALS

See Oracle Data Mining Concepts for information about converting the data type if necessary.

The nested types are described in "Nested Data". The case ID column cannot have a nested type.

Data Sets for Data Mining

You need two case tables to build a classification or regression model. One set of rows is used for building (training) the model, another set of rows is used for testing the model. It is often convenient to derive the build data and test data from the same data set. For example, you might select 60% of the rows for building the model and 40% for testing the model.

Models that implement other mining functions, such as attribute importance, clustering, association, or feature extraction, do not use separate test data.

Most data mining models can be applied to separate data. The data to which you apply the model is called the apply data or scoring data. Oracle Data Mining supports the scoring operation for classification, regression, anomaly detection, clustering, and feature extraction.

The scoring process matches column names in the scoring data with the names of the columns that were used to build the model. The scoring process does not require all the columns to be present in the scoring data. If the data types do not match, Oracle Data Mining attempts to perform type coercion. For example, if a column called PRODUCT_RATING is VARCHAR2 in the build data but NUMBER in the scoring data, Oracle Data Mining will effectively apply a TO_CHAR() function to convert it.

The column in the test or scoring data must undergo the same transformations as the corresponding column in the build data. For example, if the AGE column in the build data was transformed from numbers to the values CHILD, ADULT, and SENIOR, then the AGE column in the scoring data must undergo the same transformation so that the model can properly evaluate it.


Note:

Oracle Data Mining can embed user-specified transformation instructions in the model and reapply them whenever the model is applied. When the transformation instructions are embedded in the model, you do not need to specify them for the test or scoring data sets.

Oracle Data Mining also supports Automatic Data Preparation (ADP). When ADP is enabled, the transformations required by the algorithm are performed automatically and embedded in the model along with any user-specified transformations. Mining models that contain embedded transformations are known as supermodels.

Automatic and embedded data transformations are discussed in Oracle Data Mining Concepts.


About Attributes

Attributes are the items of data used in data mining. In predictive models, attributes are the predictors that affect a given outcome. In descriptive models, attributes are the items of information being analyzed for natural groupings or associations. A table of employee data might contain attributes such as job title, date of hire, salary, age, gender, and so on.

Data Attributes and Model Attributes

Data attributes are columns in the data sets used to build, test, or score a model. Model attributes are the data representations used internally by the model.

Data attributes and model attributes can be the same. For example a column called SIZE, with values S, M, and L, might be an attribute used by an algorithm to build a model. Internally, the model attribute SIZE would most likely be the same as the data attribute from which it was derived.

On the other hand, a nested column SALES_PROD, containing the sales figures for a group of products, would not correspond to a model attribute. The data attribute would be SALES_PROD, but each product with its corresponding sales figure (each row in the nested column) would be a model attribute.

Transformations also cause a discrepancy between data attributes and model attributes. For example, a transformation could apply a calculation to two data attributes and store the result in a new attribute. The new attribute would be a model attribute that has no corresponding data attribute. Other transformations such as binning, normalization, and outlier treatment, cause the model's representation of an attribute to be different from the data attribute in the case table.


See Also:


Target Attribute

The target of a supervised model is a special kind of attribute. The target column in the build data contains the historical values used to build (train) the model. The target column in the test data contains the historical values to which the predictions are compared. The target column in the scoring data holds the results when the model is applied.

Clustering, feature extraction, association, and anomaly detection models do not use a target.

You can query the *_MINING_MODEL_ATTRIBUTES view to find the target for a given model, as shown in Example 3-2.

Numericals and Categoricals

Model attributes are either numerical or categorical. Data attributes, which are columns in a case table, have Oracle data types.

Oracle Data Mining interprets NUMBER, FLOAT, and DM_NESTED_NUMERICALS as numerical, and CHAR, VARCHAR2, and DM_NESTED_CATEGORICALS as categorical. There is one exception: If the target of a classification model is NUMBER or FLOAT, it will be interpreted as categorical.

Numerical attributes can theoretically have an infinite number of values. The values have an implicit order, and the differences between them are also ordered.

Categorical attributes have values that belong to a finite number of discrete categories or classes. There is no implicit order associated with the values. Some categoricals are binary: They have only two possible values, such as yes or no, or male or female. The term multi-class is used to describe models when the categorical target has more than two values. For example, a target of clothing sizes could have the values small, medium, or large.

The target of a classification model is categorical. The target of a regression model is numerical. The target of an attribute importance model is either categorical or numerical.

Model Signature

The model signature is the set of data attributes used to build a model. Some or all of the attributes in the signature should be present for scoring. If some columns are not present, they are disregarded. If columns with the same names but different data types are present, the model attempts to convert the data type.

The model signature does not necessarily include all the columns in the build data. Algorithm-specific criteria may cause the model to ignore certain columns. Other columns may be eliminated by transformations. Only the data attributes actually used to build the model are included in the signature.

The target and case ID columns are not included in the signature.

ALL_MINING_MODEL_ATTRIBUTES

The columns in the model signature, plus the target (if the model is supervised), are listed in the data dictionary view, ALL/USER/DBA_MINING_MODEL_ATTRIBUTES. When used with the ALL prefix, this view returns the signature and target for all mining models accessible to the current user. When used with the USER prefix, it returns the model signature and target for all the mining models in the user's schema. The DBA prefix is only available to DBAs.

The columns in the ALL_MINING_MODEL_ATTRIBUTES view are described as follows. Details are in Table 3-1.

SQL> describe all_mining_model_attributes
 Name                          Null?    Type
 ----------------------------------------------------------
 OWNER                         NOT NULL VARCHAR2(30)
 MODEL_NAME                    NOT NULL VARCHAR2(30)
 ATTRIBUTE_NAME                NOT NULL VARCHAR2(30)
 ATTRIBUTE_TYPE                         VARCHAR2(11)
 DATA_TYPE                              VARCHAR2(12)
 DATA_LENGTH                            NUMBER
 DATA_PRECISION                         NUMBER
 DATA_SCALE                             NUMBER
 USAGE_TYPE                             VARCHAR2(8)
 TARGET                                 VARCHAR2(3)

Table 3-1 ALL_MINING_MODEL_ATTRIBUTES

ColumnDescription

OWNER

Owner of the mining model.

MODEL_NAME

Name of the mining model.

ATTRIBUTE_NAME

Name of the data attribute (column).

ATTRIBUTE_TYPE

Type of the model attribute derived by the model from the data attribute. The attribute type can be either numerical or categorical.

This information is only meaningful if there is a one-to-one mapping between the data attribute and the model attribute. If the data attribute has undergone transformations that change the way it is used by the model, then the ATTRIBUTE_TYPE may not be relevant.

DATA_TYPE

The Oracle data type of the data attribute (column):


NUMBER
FLOAT
CHAR
VARCHAR2
NESTED TABLE

If the value is NESTED TABLE, the data type is either:


DM_NESTED_NUMERICALS
or
DM_NESTED_CATEGORICALS

If the data type is NESTED TABLE, you can determine whether it is DM_NESTED_NUMERICALS or DM_NESTED_CATEGORICALS from the ATTRIBUTE_TYPE column.

See "Nested Data" for details.

DATA_LENGTH

Length of the data type

DATA_PRECISION

Precision of a fixed point number, which is the total number of significant decimal digits, is represented as p in the data type NUMBER (p,s).

DATA_SCALE

Scale of a fixed point number. Scale, which is the number of digits from the decimal to the least significant digit, is represented as s in the data type NUMBER (p,s).

USAGE_TYPE

Indicates that the attribute was used to construct the model. Some attributes may be eliminated by transformations or algorithmic processing. The *_MINING_MODEL_ATTRIBUTES view only lists the data attributes used by the model (model signature), therefore the value of USAGE_TYPE is always ACTIVE.

TARGET

Whether or not the attribute is a target. The value can be either YES (the attribute is a target) or NO (the attribute is not a target).

If the attribute is a target, and it has undergone transformations for manipulation by the algorithm, the description in ALL_MINING_MODEL_ATTRIBUTES reflects the target attribute's characteristics after reverse transformations have been applied.


The query in Example 3-2 returns information about the data attributes of the model T_SVM_CLAS_SAMPLE, an SVM model generated by one of the Data Mining sample programs. The query returns the name and data type of each of the data attributes in the model signature, whether the attribute is used as a numerical or as a categorical, and whether or not the attribute is a target.

Example 3-2 ALL_MINING_MODEL_ATTRIBUTES

SQL> select model_name, attribute_name, attribute_type, data_type, target
             from user_mining_model_attributes 
             where model_name = 'T_SVM_CLAS_SAMPLE';
 
MODEL_NAME          ATTRIBUTE_NAME          ATTRIBUTE_TYPE  DATA_TYPE     TARGET
------------------- ---------------------   --------------- -----------   ------
T_SVM_CLAS_SAMPLE   COMMENTS                NUMERICAL       NESTED TABLE  NO
T_SVM_CLAS_SAMPLE   AGE                     NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   CUST_MARITAL_STATUS     CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   COUNTRY_NAME            CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   CUST_INCOME_LEVEL       CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   EDUCATION               CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   OCCUPATION              CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   HOUSEHOLD_SIZE          CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   YRS_RESIDENCE           NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   BULK_PACK_DISKETTES     NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   FLAT_PANEL_MONITOR      NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   HOME_THEATER_PACKAGE    NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   BOOKKEEPING_APPLICATION NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   PRINTER_SUPPLIES        NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   Y_BOX_GAMES             NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   OS_DOC_SET_KANJI        NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   CUST_GENDER             CATEGORICAL     CHAR          NO
T_SVM_CLAS_SAMPLE   AFFINITY_CARD           NUMERICAL       NUMBER        YES

Scoping of Model Attribute Name

The model attribute name consists of two parts: a column name, and a subcolumn name.

column_name[.subcolumn_name]

The column_name component is the name of the data attribute. It is present in all model attribute names. Nested attributes also have a subcolumn_name component as shown in Example 3-3.

Example 3-3 Model Attributes Derived from a Nested Column

The nested column SALESPROD has three rows.

SALESPROD(ATTRIBUTE_NAME, VALUE)
--------------------------------
((PROD1, 300),
 (PROD2, 245),
 (PROD3, 679))

The name of the data attribute is SALESPROD. Its associated model attributes are:

SALESPROD.PROD1
SALESPROD.PROD2
SALESPROD.PROD3

Model Details

Model details reveal information about model attributes and their treatment by the algorithm. There is a separate GET_MODEL_DETAILS routine for each algorithm.

Transformation and reverse transformation expressions are associated with model attributes. The transformations are applied to the model for algorithmic processing. The reverse transformations are applied for model details. The information returned to the user by GET_MODEL_DETAILS is expressed in the form of the original data attributes, or as close to it as possible.

Reverse transformations are also applied to the target when a supervised model is scored. Reverse transformations support model transparency. Transparency is discussed in Oracle Data Mining Concepts.

Example 3-4 shows the definition of the GET_MODEL_DETAILS function for an Attribute Importance model. The PIPELINED keyword instructs Oracle Database to return the rows as single values instead of returning all the rows as a single value.

Example 3-4 Model Details for an Attribute Importance Model

The syntax of the GET_MODEL_DETAILS function for Attribute Importance models is shown as follows.

DBMS_DATA_MINING.GET_MODEL_DETAILS_AI (
             model_name             VARCHAR2)
RETURN DM_RANKED_ATTRIBUTES PIPELINED;

The function returns DM_RANKED_ATTRIBUTES, a virtual table. The columns are the model details. There is one row for each model attribute in the specified model. The columns are described as follows.

(attribute_name          VARCHAR2(4000),
 attribute_subname       VARCHAR2(4000),
 importance_value        NUMBER,
 rank                    NUMBER(38))

Nested Data

Oracle Data Mining requires a case table in single-record case format, with each record in a separate row. What if some or all of your data is in multi-record case format, with each record in several rows? What if you want one attribute to represent a series or collection of values, such as a student's test scores or the products purchased by a customer?

This kind of one-to-many relationship is usually implemented as a join between tables. For example, you might join your customer table to a sales table and thus associate a list of products purchased with each customer.

Oracle Data Mining supports dimensioned data through nested columns. To include dimensioned data in your case table, create a view and cast the joined data to one of the Data Mining nested table types. Each row in the nested column consists of an attribute name/value pair. Oracle Data Mining internally processes each nested row as a separate attribute.


See Also:

Sample code for converting to a nested table in "Example: Creating a Nested Column for Mining".

The algorithms that support nested data are listed in Table 3-2

Table 3-2 Oracle Data Mining Algorithms that Support Nested Data

AlgorithmMining Function

Apriori

association rules

GLM

classification and regression

k-Means

clustering

MDL

attribute importance

Naive Bayes

classification

NMF

feature extraction

SVM

classification, regression, and anomaly detection


Nested Object Types

Oracle Database supports user-defined data types that make it possible to model real-world entities as objects in the database. CollR ection types are object data types for modeling multi-valued attributes. Nested tables are collection types. Nested tables can be used anywhere that other data types can be used. You can learn more about collection types in Oracle Database Object-Relational Developer's Guide.

Oracle Data Mining supports two nested object types: one for numerical attributes, the other for categorical attributes.

DM_NESTED_NUMERICALS

The DM_NESTED_NUMERICALS object type is a nested table of numerical attributes. Each row is a single DM_NESTED_NUMERICAL.

The nested numerical attributes (rows) are described as follows.

SQL> describe dm_nested_numerical
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ATTRIBUTE_NAME                                     VARCHAR2(4000)
 VALUE                                              NUMBER
 

The collection of numerical attributes (table) is described as follows.

SQL> describe dm_nested_numericals
 DM_NESTED_NUMERICALS TABLE OF SYS.DM_NESTED_NUMERICAL
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ATTRIBUTE_NAME                                     VARCHAR2(4000)
 VALUE                                              NUMBER

DM_NESTED_CATEGORICALS

The DM_NESTED_CATEGORICALS object type is a nested table of categorical attributes. Each row is a single DM_NESTED_CATEGORICAL.

The nested categorical attributes (rows) are described as follows.

SQL> describe dm_nested_categorical
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ATTRIBUTE_NAME                                     VARCHAR2(4000)
 VALUE                                              VARCHAR2(4000)
 

The collection of categorical attributes (table) is described as follows.

SQL> describe dm_nested_categoricals
 DM_NESTED_CATEGORICALS TABLE OF SYS.DM_NESTED_CATEGORICAL
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ATTRIBUTE_NAME                                     VARCHAR2(4000)
 VALUE                                              VARCHAR2(4000)

Example: Transforming Transactional Data for Mining

Example 3-5 shows data from a view of a sales table. It includes sales for three of the many products sold in four regions. This data is not suitable for mining at the product level because sales for each case (product), is stored in several rows.

Example 3-5 Product Sales per Region in Multi-Record Case Format

PRODUCT   REGION         SALES
-------   --------   ----------
Prod1       NE           556432
Prod2       NE           670155
Prod3       NE             3111
.
.
Prod1       NW            90887
Prod2       NW           100999
Prod3       NW           750437
.
.
Prod1       SE            82153
Prod2       SE            57322
Prod3       SE            28938
.
.
Prod1       SW          3297551
Prod2       SW          4972019
Prod3       SW           884923
.
.

Example 3-6 shows how this data could be transformed for mining. The case ID column would be PRODUCT. SALES_PER_REGION, a nested column of type DM_NESTED_NUMERICALS, would be a data attribute. This table is suitable for mining, because the information for each case is stored in a single row.

Example 3-6 Product Sales per Region in Single-Record Case Format

PRODUCT      SALES_PER_REGION
          (ATTRIBUTE_NAME, VALUE)
------    --------------------------
Prod1      ('NE' ,     556432)
           ('NW' ,      90887)
           ('SE' ,      82153)
           ('SW' ,    3297551)
Prod2      ('NE' ,     670155)
           ('NW' ,     100999)
           ('SE' ,      57322)
           ('SW' ,    4972019)
Prod3      ('NE' ,       3111)
           ('NW' ,     750437)
           ('SE' ,      28938)
           ('SW' ,     884923)
.
.

Oracle Data Mining treats each nested row as a separate model attribute, as shown in Example 3-7. (Note that the presentation in this example is conceptual only. The data is not actually pivoted before being processed.)

Example 3-7 Model Attributes Derived From SALES_PER_REGION

PRODUCT    SALES_PER_REGION.NE    SALES_PER_REGION.NW    SALES_PER_REGION.SE    SALES_PER_REGION.SW   
-------    ------------------    -------------------    ------------------    -------------------
Prod1                 556432                 90887                  82153                3297551
Prod2                 670155                100999                  57322                4972019
Prod3                   3111                 750437                 28938                 884923
.
.

Example: Creating a Nested Column for Mining

Example 3-8 shows how to define a nested column for data mining. This example uses transactional market basket data.

Example 3-8 Convert to a Nested Column

The view SALES_TRANS_CUST provides a list of transaction IDs to identify each market basket and a list of the products in each basket.

SQL> describe sales_trans_cust
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ----------------
 TRANS_ID                                              NOT NULL NUMBER
 PROD_NAME                                             NOT NULL VARCHAR2(50)
 QUANTITY                                                       NUMBER

The following SQL statement transforms this data to a column of type DM_NESTED_NUMERICALS in a view called SALES_TRANS_CUST_NESTED. This view can be used as a case table for mining.

SQL> CREATE VIEW sales_trans_cust_nested AS
             SELECT trans_id,
                     CAST(COLLECT(DM_NESTED_NUMERICAL(
                     prod_name, quantity))
                     AS DM_NESTED_NUMERICALS) custprods
                  FROM sales_trans_cust
             GROUP BY trans_id;

This query returns two rows from the transformed data.

SQL> select * from sales_trans_cust_nested 
               where trans_id < 101000
               and trans_id > 100997;
 
TRANS_ID  CUSTPRODS(ATTRIBUTE_NAME, VALUE)
-------  ------------------------------------------------
100998   DM_NESTED_NUMERICALS
          (DM_NESTED_NUMERICAL('O/S Documentation Set - English', 1)
100999   DM_NESTED_NUMERICALS
          (DM_NESTED_NUMERICAL('CD-RW, High Speed Pack of 5', 2),
           DM_NESTED_NUMERICAL('External 8X CD-ROM', 1), 
           DM_NESTED_NUMERICAL('SIMM- 16MB PCMCIAII card', 1))

Market Basket Data

Market basket data identifies the items sold in a set of baskets or transactions. Oracle Data Mining provides the association mining function for market basket analysis.

Association models use the Apriori algorithm to generate association rules that describe how items tend to be purchased in groups. For example, an association rule might assert with 65% confidence that 80% of the people who buy peanut butter also buy jelly.

Market basket data is usually transactional. In transactional data, a case is a transaction and the data for a transaction is stored in multiple rows. Oracle Data Mining association models can be built on transactional data or on single-record case data. The ODMS_ITEM_ID_COLUMN_NAME and ODMS_ITEM_VALUE_COLUMN_NAME settings specify whether or not the data for association rules is in transactional format.


Note:

Association models are the only type of model that can be built on native transactional data. For all other types of models, Oracle Data Mining requires that the data be presented in single-record case format

The Apriori algorithm assumes that the data is transactional and that it has many missing values. Apriori interprets all missing values as sparse data, and it has its own native mechanisms for handling sparse data.


See Also:


Missing Data

Oracle Data Mining distinguishes between sparse data and data that contains random missing values. The latter means that some attribute values are unknown. Sparse data, on the other hand, contains values that are assumed to be known, although they are not represented in the data.

A typical example of sparse data is market basket data. Out of hundreds or thousands of available items, only a few are present in an individual case (the basket or transaction). All the item values are known, but they are not all included in the basket. Present values may have a quantity, while the items that are not represented are sparse (with a known quantity of zero).

How Oracle Data Mining Interprets Missing Data

Oracle Data Mining interprets missing data as follows:

  • Missing — Missing values in columns with a simple data type (not nested) are assumed to be missing at random.

  • Sparse — Missing values in nested columns indicate sparsity.

Examples: Missing Values or Sparse Data?

The examples in this section illustrate how Oracle Data Mining identifies data as either sparse or missing at random.

Sparsity in a Sales Table

A sales table contains point-of-sale data for a group of products, sold in several stores to different customers over a period of time. A particular customer will only have bought some of the products. Those products that a customer did not buy will not appear as rows in the sales table.

If you were to figure out the amount of money a customer has spent for each product, the unpurchased products would have an inferred amount of zero. The value is not random or unknown; it is zero, even though no row appears in the table.

Note that the sales data is dimensioned (by product, stores, customers, and time) and would be represented as nested data for mining.

Since missing values in a nested column will always indicate sparsity, you should make sure that this interpretation is appropriate for the data that you wish to mine. For example, when trying to mine a multi-record case data set containing users' movie ratings of a large movie database, the missing ratings would be unknown (missing at random), but Oracle Data Mining would treat the data as sparse and infer a rating of zero for the missing value.

Missing Values in a Table of Customer Data

A table of customer data contains demographic data about customers. The case ID column is the customer ID. The attributes are age, education, profession, gender, house-hold size, and so on. Not all the data may be available for each customer. Any missing values are considered to be missing at random. For example, if the age of customer 1 and the profession of customer 2 are not present in the data, that information is simply unknown. It does not indicate sparsity.

Note that the customer data is not dimensioned. There is a one-to-one mapping between the case and each of its attributes. None of the attributes are nested.

How Oracle Data Mining Treats Missing Data

Missing value treatment depends on the algorithm and on the nature of the data (categorical or numerical, sparse or missing at random). Missing value treatment is summarized in Table 3-3.


Note:

Oracle Data Mining performs the same missing value treatment whether or not Automatic Data Preparation is being used.

Table 3-3 Missing Value Treatment by Algorithm

Missing DataSVM, NMF, k-Means, GLMNB, MDL, DT, OCApriori

NUMERICAL missing at random

Oracle Data Mining replaces missing numerical values with the mean.

The algorithm handles missing values naturally as missing at random.

The algorithm interprets all missing data as sparse.

CATEGORICAL missing at random

Oracle Data Mining replaces missing categorical values with the mode.

The algorithm handles missing values naturally as missing random.

The algorithm interprets all missing data as sparse.

NUMERICAL sparse

Oracle Data Mining replaces sparse numerical data with zeros.

DT and O-Cluster do not support nested data, and therefore do not support sparse data. NB and MDL replace sparse numerical data with zeros.

The algorithm handles sparse data.

CATEGORICAL sparse

Oracle Data Mining replaces sparse categorical data with zero vectors.

DT and O-Cluster do not support nested data, and therefore do not support sparse data. NB and MDL replace sparse categorical data with the special value DM$SPARSE.

The algorithm handles sparse data.


Attribute Transformation and Missing Data Treatment

If you want Oracle Data Mining to treat missing data as sparse instead of missing at random or missing at random instead of sparse, transform it before building the model.

If you want missing values to be treated as sparse, but Oracle Data Mining would interpret them as missing at random, you can use a SQL function like NVL to replace the nulls with a value such as "NA". Oracle Data Mining will not perform missing value treatment if there is a specified value. See Oracle Database SQL Language Reference

If you want missing nested attributes to be treated as missing at random, you can transform the nested rows into physical attributes in separate columns — as long as the case table stays within the 1000 column limitation imposed by the Database. Fill in all of the possible attribute names, and specify them as null.

PKPK-A OEBPS/toc.htm[< Table of Contents

Contents

List of Examples

List of Figures

List of Tables

Title and Copyright Information

Preface

What's New in the Oracle Data Mining APIs?

1 Data Mining API Use Cases

2 A Tour of the Data Mining APIs

3 Creating the Case Table

4 Preparing Text for Mining

5 Building a Model

6 Scoring and Deployment

7 The Data Mining Java API

Index

PKC}#`<[<PK-AOEBPS/java_api.htm The Data Mining Java API

7 The Data Mining Java API

This chapter presents an overview of the Oracle Data Mining Java API. The Java API is based on JDM, the industry-standard Java API for data mining.

The Java API is layered on the PL/SQL and SQL language interfaces to Oracle Data Mining. All the SQL-based functionality described in this manual is also implemented in the Java API.

However, the Java API supports several features not implemented in SQL, such as asynchronous execution of mining tasks and text transformation.


Note:

The Oracle Data Mining Java API is deprecated in this release.

Oracle recommends that you not use deprecated features in new applications. Support for deprecated features is for backward compatibility only


This chapter contains the following topics:

The Java Environment

The Oracle Data Mining Java API requires Oracle Database 11g Release 2 (11.2) and J2SE 1.5. It is backward compatible and can be used with Oracle Database 10.2.

To use the Oracle Data Mining Java API, include the following libraries in your CLASSPATH:

$ORACLE_HOME/rdbms/jlib/jdm.jar
$ORACLE_HOME/rdbms/jlib/ojdm_api.jar
$ORACLE_HOME/rdbms/jlib/xdb.jar
$ORACLE_HOME/jdbc/lib/ojdbc5.jar
$ORACLE_HOME//oc4j/j2ee/home/lib/connector.jar 
$ORACLE_HOME/jlib/orai18n.jar
$ORACLE_HOME/jlib/orai18n-mapping.jar 
$ORACLE_HOME/lib/xmlparserv2.jar

Connecting to the Data Mining Engine

The Data Mining Engine (DME) is the infrastructure that offers a set of data mining services to its JDM clients. The Oracle Database provides the in-database data mining functionality for JDM through the core Oracle Data Mining option. So in the rest of this document the Oracle Database is referred to as the DME.

To access data mining functionality in the database, a DME Connection needs to be created. To connect to the DME, OJDM supports following different options.

The DME Connection object is described in detail in "Features of a DME Connection".

Connection Factory

The Connection factory is used to create a DME connection. The JDM standard defines ConnectionFactory as a Java interface to provide a vendor neutral approach to create a DME Connection. In this approach, the application infrastructure needs to register the instance of ConnectionFactory in a JNDI server. Applications can lookup for ConnectionFactory in the JNDI server to instantiate a Connection using this factory.

OJDM provides oracle.dmt.jdm.resource.OraConnectionFactory class, which can either be instantiated and accessed to create the connection or can be registered in JNDI server. Following code illustrates these two approaches to create a connection factory.

Create ConnectionFactory Using OraConnectionFactory

//Create OraConnectionFactory
javax.datamining.resource.ConnectionFactory connFactory = 
                 oracle.dmt.jdm.resource.OraConnectionFactory();

Lookup ConnectionFactory From the JNDI Server

//Setup the initial context to connect to the JNDI server
Hashtable env = new Hashtable();
env.put( Context.INITIAL_CONTEXT_FACTORY,
"oracle.dmt.jdm.resource.OraConnectionFactory" );
env.put( Context.PROVIDER_URL, "http://myHost:myPort/myService" );
env.put( Context.SECURITY_PRINCIPAL, "user" );
env.put( Context.SECURITY_CREDENTIALS, "password" );
InitialContext jndiContext = new javax.naming.InitialContext( env );
// Perform JNDI lookup to obtain the connection factory
javax.datamining.resource.ConnectionFactory dmeConnFactory =
(ConnectionFactory) jndiContext.lookup("java:comp/env/jdm/MyServer");
//Lookup ConnectionFactory
javax.datamining.resource.ConnectionFactory connFactory = 
  (ConnectionFactory) jndiContext.lookup("java:comp/env/jdm/MyServer");

Connect Using JDBC

This option is useful when the applications want to control the JDBC Connections outside the OJDM and allow the OraConnectionFactory to use the specified OracleDataSource to create the database connection. This approach gives applications the ability to use the implicit connection caching features as required. By default, OJDM doesn't enable the implicit connection caching. Oracle Database JDBC Developer's Guide for information about connection caching.

//Create an OracleDataSource
OracleDataSource ods = new OracleDataSource();
ods.setURL(URL);
ods.setUser(user);
ods.setPassword(password);
 
//Create a connection factory using the OracleDataSource
javax.datamining.resource.ConnectionFactory connFactory = 
  oracle.dmt.jdm.resource.OraConnectionFactory(ods);
//Create DME Connection
javax.datamining.resource.Connection dmeConn = 
    connFactory.getConnection();

Connect Using ConnectionSpec

This option is useful when the application doesn't want to pre-create the JDBC Connection and allow OJDM to maintain the JDBC Connection. Here the user needs to create an empty ConnectionSpec instance using getConnectionSpec() method in the oracle.dmt.jdm.resource.OraConnectionFactory class and create a DME Connection using the connection spec. The following code illustrates the usage.

//Create ConnectionSpec
ConnectionSpec connSpec = m_dmeConnFactory.getConnectionSpec();
connSpec.setURI("jdbc:oracle:thin:@host:port:sid");
connSpec.setName("user");
connSpec.setPassword("password");          
 
//Create DME Connection
javax.datamining.resource.Connection m_dmeConn = 
m_dmeConnFactory.getConnection(connSpec);

Features of a DME Connection

In the Oracle Data Mining Java API, the DME Connection is the primary factory object. The Connection instantiates the object factories using the getFactory method. The Connection object provides named object lookup, persistence, and task execution features.

Create Object Factories

The Connection.getFactory method creates a factory object. For example, to create a factory for the PhysicalDataSet object, pass the absolute name of the object to this method. The getFactory method creates an instance of PhysicalDataSetFactory.

javax.datamining.data.PhysicalDataSetFactory pdsFactory =
                dmeConn.getFactory("javax.datamining.data.PhysicalDataSet");

Provide Access to Mining Object Metadata

The Connection object provides methods for retrieving metadata about mining objects.

MethodDescription
getCreationDateReturns the creation date of the specified named object.
getCreationDate(java.lang.String objectName,
                 NamedObject objectType)
     returns java.util.Date
getDescriptionReturns the description of the specified mining object.
getDescription(java.lang.String objectName,
                NamedObject objectType)
     returns java.lang.String 
getObjectNamesReturns a collection of the names of the objects of the specified type.
getObjectNames(NamedObject objectType)
     returns java.util.Collection
getObjectNamesThis is an Oracle JDM extension method that is added in 11.1 to provide a listing of mining object names across schemas or within a schema. It provides various optional method arguments that can be used to get a filtered list of arguments.
getObjectNames(
java.lang.String schemaPattern, 
NamedObject objectType, 
java.lang.String objectNamePattern, 
javax.datamining.Enum minorType_1,
javax.datamining.Enum minorType_2 ): 
returns java.sql.ResultSet

See Example 7-1.


Example 7-1 Oracle JDM Extension Method getObjectNames

This example illustrates the getObjectNames method.

To list the names of classification test metrics computed by the user SCOTT, specify:


the schemaPattern as "SCOTT"
objectType as NamedObject.testMetrics
objectPattern as null
minorType_1 as MiningFunction.classification
minorType_2 as null

Irrespective of the type of filters specified, the getObjectNames method returns the java.sql.ResultSet object with the following columns.

Column NameData TypeDescription
SCHEMA_NAMEStringName of the schema (can be null)
TYPEStringType of the mining object
NAMEStringName of the mining object
MINOR_TYPE_1StringMining objects can have minor/sub types. For example, model objects can have function and algorithm as minor types.
MINOR_TYPE_2StringMining objects can have more than one minor type. If they have a second minor type, then this column is used.
CREATION_DATETimestampDate when this object was created
DESCRIPTIONStringDescription of the object

Persistence and Retrieval of Mining Objects

The Connection object provides methods for retrieving mining objects and saving them in the DME. Persistent objects are stored as database objects. Transient objects are stored in memory by the Connection object.

MethodDescription
saveObjectSaves the named object in the metadata repository associated with the connection.
saveObject(java.lang.String name, MiningObject object,
            boolean replace)
retrieveObjectRetrieves a copy of the specified named object from the metadata repository associated with the connection.
retrieveObject(java.lang.String objectIdentifier)
    returns MiningObject 
retrieveObjectRetrieves a copy of the named object from the metadata repository associated with the connection.
retrieveObject(java.lang.String name, 
                NamedObject objectType)
     returns MiningObject 
retrieveObjectsReturns a collection of mining objects of the given type that were created within the specified time interval (from createAfter to createBefore).
(java.util.Date createdAfter, java.util.Date createdBefore,
 NamedObject objectType):
 returns java.util.Collection
retrieveObjectsReturns a collection of mining objects of the specified type that were created within the specified time interval (from createAfter to createBefore)
retrieveObjects(java.util.Date createdAfter, 
java.util.Date createdBefore, NamedObject objectType, 
Enum minorType): 
returns java.util.Collection

Execute Mining Tasks

The Connection object provides an execute method, which can execute mining tasks either asynchronously or synchronously. The DME uses the database Scheduler to execute mining tasks, which are stored in the user's schema as Scheduler jobs. The following methods are used to execute the tasks.

Task Executionexecute method syntax
asynchronous
execute(java.lang.String taskName)
     returns ExecutionHandle                 
synchronous
execute(Task task,java.lang.Long timeout))
     returns ExecutionHandle                 
Typically to be used with single record scoring, but it may be used in other contexts as well.


See Also:


Retrieve DME Capabilities and Metadata

The Connection interface provides a ConnectionMetaData and supportsCapability retrieval methods. This feature is useful for applications to know more about the DME at runtime. The following methods are used for retrieving this information from the connection.

MethodDescription
getMetaDataReturns information about the underlying DME instance represented through an active connection. ConnectionMetaData provides version information for the JDM implementation and Oracle Database.
getMetaData()
      returns ConnectionMetaData
getSupportedFunctionsReturns an array of mining functions that are supported by the implementation.
getSupportedFunctions()
     returns MiningFunction[]
getSupportedAlgorithmsReturns an array of mining algorithms that are supported by the specified mining function.
getSupportedAlgorithms(MiningFunction function)
     returns MiningAlgorithm[]
supportsCapabilityReturns true if the specified combination of mining capabilities is supported. If an algorithm is not specified, returns true if the specified function is supported.
supportsCapability(MiningFunction function,
                    MiningAlgorithm algorithm, 
                    MiningTask taskType)
     returns boolean

Retrieve Version Information

The ConnectionMetaData object provides methods for retrieving JDM standard version information and Oracle version information.

MethodDescription
getVersionReturns the version of the JDM Standard API. It must be "JDM 1.0" for the first release of JDM.
getVersion()
     returns String
getMajorVersionReturns the major version number. For the first release of JDM, this is "1".
getMajorVersion()
     returns int
getMinorVersionReturns the minor version number. For the first release of JDM, this is "0".
getMinorVersion()
     returns int
getProviderNameReturns the provider name as "Oracle Corporation".
getProviderName()
     returns String
getProviderVersionReturns the version of the Oracle Database that shipped the Oracle Data Mining Java API jar file.
getProviderVersion()
     returns String       
getProviderDMEVersionReturns the DME version of the provider
getProviderDMEVersion()
     returns String       

API Design Overview

This section briefly describes the OJDM design principles to familiarize the developers with the API. The JDM standard uses the factory method pattern as the core design pattern for the API. User can instantiate a JDM object using its factory. This enables JDM vendors like Oracle to implement a vendor neutral API. OJDM follows the same factory method pattern for its extensions. javax.datamining is the base package for the JDM standard defined classes and oracle.dmt.jdm is the base package for the Oracle extensions to the JDM standard

The JDM standard organizes its packages by the mining functions and mining algorithms. For example, javax.datamining.supervised package has all the supervised functions related classes and sub-packages java.datamining.supervised.classification and java.datamining.supervised.regression. Each function sub-package has the classes related to that function. Similarly, javax.datamining.algorithm is the base package for all algorithms and each algorithm has its sub-package under this package, for example, javax.datamining.algorithm.naivebayes is the sub-package for Naïve Bayes algorithm related classes. OJDM follows a similar package structure for the extensions, for example, feature extraction is a non-JDM standard function supported by the OJDM, here oracle.dmt.jdm.featureextraction is the package for this function and oracle.dmt.jdm.algorithm.nmf package for the Non-Negative Matrix Factorization algorithm used for feature extraction.

The JDM standard has some core packages that define common classes and packages for tasks, model details, rules and statistics. For more details refer to the JDM javadoc. The class diagram in Figure 7-1 illustrates the inheritance hierarchy of the named mining objects that are discussed in Chapter 2. In the subsequent sections more class diagrams are used to illustrate other OJDM objects. Note that the classes/interfaces shown in gray color are oracle JDM extension interfaces/classes. In Figure 7-1, oracle.dmt.jdm.transform.OraTransformationSequence is an Oracle extension to the mining objects defined in JDM 1.1 standard.

Figure 7-1 JDM Named Objects Class Diagram

Named objects class diagram.
Description of "Figure 7-1 JDM Named Objects Class Diagram"

Describing the Mining Data

The JDM standard defines physical and logical data objects to describe the mining attribute characteristics of the data as well as statistical computations for describing the data.

The javax.datamining.data package contains all the data-related classes. The class diagram in Figure 7-2 illustrates the class relationships of the data objects supported by the Oracle Data Mining Java API.

Figure 7-2 Data Objects in Oracle Data Mining Java API

Data objects class diagram
Description of "Figure 7-2 Data Objects in Oracle Data Mining Java API"

The PhysicalDataSet object is used to specify the name and location of the dataset used for mining operations. For example, to represent a model build input dataset MINING_DATA_BUILD_V in a DMUSER schema account, PhysicalDataSet object is created with the data URI DMUSER.MINING_DATA_BUILD_V. The schema name prefix is optional when accessing the datasets in the same user account.

Note that in the class diagram in Figure 7-2 a PhysicalDataSet can have PhysicalAttribute objects. A PhysicalAttribute represents physical characteristics of the columns of the input dataset; optionally physical attributes can specify the roles of the column. For example, in the MINING_DATA_BUILD_V dataset, CUST_ID uniquely identifies each case used for mining. So the role of the CUST_ID column is specified as case id.

Example 7-2 illustrates the code sample that creates the PhysicalDataSet object. Note that the PhysicalDataSet object is saved with the name JDM_BUILD_PDS that can be specified as input to model build that we discuss later in "Build Settings"

The PhysicalDataRecord object shown in Figure 7-2 is used to specify a single record of a dataset. It is used for single record apply that we will discuss in a later section of this Chapter. The SignatureAttribute is used to specify the model signature of a mining model that will be discussed in later section of this Chapter.In OJDM attribute data types are used to implicitly specify the mining attribute types. For example, all VARCHAR2 columns are treated as categorical and all NUMBER columns are treated as numerical. So there is no need to specify logical data details in OJDM. However, to rename attributes of a column, a user can specify the embedded transformations that are discussed in the next section.

Example 7-2 Creation of a Physical Dataset

//Create PhysicalDataSetFactory
PhysicalDataSetFactory pdsFactory = 
(PhysicalDataSetFactory)m_dmeConn.getFactory("javax.datamining.data.PhysicalDataSet");
//Create a PhysicalDataSet object
PhysicalDataSet buildData = pdsFactory.create("DMUSER.MINING_DATA_BUILD_V", false);
//Create PhysicalAttributeFactory 
PhysicalAttributeFactory paFactory =
(PhysicalAttributeFactory)m_dmeConn.getFactory("javax.datamining.data.PhysicalAttribute");
//Create PhysicalAttribute object
PhysicalAttribute pAttr = paFactory.create(
"cust_id", AttributeDataType.integerType, PhysicalAttributeRole.caseId );
//Add the attribute to the PhysicalDataSet object
buildData.addAtribute(pAttr);
//Save the physical data set object
dmeConn.saveObject("JDM_BUILD_PDS", buildData, true);

Build Settings

In the Oracle Data Mining Java API, the BuildSettings object is saved as a table in the database. The settings table is compatible with the DBMS_DATA_MINING.CREATE_MODEL procedure. The name of the settings table must be unique in the user's schema. Figure 7-3 illustrates the build settings class hierarchy.

Figure 7-3 Build Settings Class Diagram.

Build settings class diagram
Description of "Figure 7-3 Build Settings Class Diagram."

The code in Example 7-3 illustrates the creation and storing of a classification settings object with a tree algorithm.

Example 7-3 Creation of a Classification Settings with Decision Tree Algorithm

//Create a classification settings factory
ClassificationSettingsFactory clasFactory = 
(ClassificationSettingsFactory)dmeConn.getFactory
     ("javax.datamining.supervised.classification.ClassificationSettings");
//Create a ClassificationSettings object
ClassificationSettings clas = clasFactory.create();
//Set target attribute name
clas.setTargetAttributeName("AFFINITY_CARD");
//Create a TreeSettingsFactory
TreeSettingsFactory treeFactory =
(TreeSettingsFactory)dmeConn.getFactory
     ("javax.datamining.algorithm.tree.TreeSettings");
//Create TreeSettings instance
TreeSettings treeAlgo = treeFactory.create();
treeAlgo.setBuildHomogeneityMetric(TreeHomogeneityMetric.entropy);
treeAlgo.setMaxDepth(10);
treeAlgo.setMinNodeSize( 10, SizeUnit.count );
//Set algorithm settings in the classification settings
clas.setAlgorithmSettings(treeAlgo);
//Save the build settings object in the database
dmeConn.saveObject("JDM_TREE_CLAS", clas, true);

Enable Automated Data Preparation

In 11.1, all mining algorithms support automated data preparations (ADP). By default for decision tree and GLM algorithms, ADP is enabled. For other algorithms it is disabled by default for backward compatibility reasons. To enable ADP explicitly for the algorithms that do not enable by default, invoke the following function, by specifying the useAutomatedDataPreparations boolean flag as true.

OraBuildSettings.useAutomatedDataPreparations
          (boolean useAutomatedDataPreparations)

For more information about automatic data preparation, see Oracle Data Mining Concepts.

Executing Mining Tasks

OJDM uses the DBMS_SCHEDULER infrastructure for executing mining tasks either synchronously or asynchronously in the database. A mining task is saved as a DBMS_SCHEDULER job in the user schema and is set to DISABLED state. When user calls the execute method in DME Connection, the job state will be changed to ENABLED and scheduler starts executing the mining task by creating a new database session for asynchronous executions. For synchronous executions scheduler uses the same database session opened by the DME connection.

The class diagram in Figure 7-4 illustrates the different types of tasks that are available in OJDM and its class hierarchy. Subsequent sections will discuss more about the individual tasks shown in this diagram

Figure 7-4 Task Class Diagram

Class diagram of different types of tasks.
Description of "Figure 7-4 Task Class Diagram"

DBMS_SCHEDULER provides additional scheduling and resource management features. You can extend the capabilities of Oracle Data Mining tasks by using the Scheduler infrastructure.


See Also:

Oracle Database Administrator's Guide for information about the database scheduler.

Creating Mining Task Workflows

In Oracle Data Mining 11.1, the task infrastructure supports applications to specify dependent tasks through the API and deploy the execution of the tasks to the database server. The server executes complete workflow of tasks specified through the API and once deployed it does not depend on client. Client can monitor the execution process using OJDM API. For example, typically after the completion of data preparations, model is built and then tested and applied. Both test and apply can be done in parallel after model build is successful.

To build a task flow invoke the method OraTask.addDependency(String parentTaskName). For example, the code in Example 7-4 illustrates how to setup a mining task workflow, where first run the transformations task and then model build task. After successful completion of the build task run apply and test tasks in parallel.

Example 7-4 Building Mining Task Workflows

//Task objects declarations
private TransformationTask xformTask;
private BuildTask buildTask;
private TestTask testTask;
private DataSetApplyTask applyTask;
//Creation of the tasks and task input objects are skipped for this example
…
//Save the first task in the workflow (the transformations task)
dmeConn.saveObject("transformationTask", xformTask, true);
//Specify dependencies before saving of the tasks
buildTask.addDependency("transformationTask");
dmeConn.saveObject("modelBuildTask", buildTask, true);
testTask.addDependency("modelBuildTask");
dmeConn.saveObject("modelTestTask", testTask, true);
applyTask.addDependency("modelBuildTask");
dmeConn.saveObject("modelApplyTask", applyTask, true);
//Execute the first task in the workflow to initiate the execution of the whole workflow
dmeConn.execute("transformationTask");

Building a Mining Model

The javax.datamining.task.BuildTask class is used to build a mining model. Prior to building a model, a PhysicalDataSet object and a BuildSettings object must be saved.

Example 7-5 illustrates the building of a tree model using the PhysicalDataSet described in "Describing the Mining Data" and the BuildSettings described in "Build Settings".

Example 7-5 Building a Model

//Create BuildTaskFactory
BuildTaskFactory buildTaskFactory =
     dmeConn.getFactory("javax.datamining.task.BuildTask");
//Create BuildTask object
BuildTask buildTask = buildTaskFactory.create
     ( "JDM_BUILD_PDS","JDM_TREE_CLAS","JDM_TREE_MODEL"); 
//Save BuildTask object
dmeConn.saveObject("JDM_BUILD_TASK", buildTask, true);
//Execute build task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_BUILD_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);

Exploring Model Details

After building a model using the BuildTask, a model object is persisted in the database. It can be retrieved to explore the model details.

The class diagram in Figure 7-5 illustrates the different types of model objects and model details objects supported by the Oracle Data Mining Java API.

Figure 7-5 Model and Model Detail Class Diagram

Class diagram of Model objects and model details
Description of "Figure 7-5 Model and Model Detail Class Diagram"

Example 7-6 illustrates the retrieval of the classification tree model built in "Building a Mining Model" and its TreeModelDetail.

Example 7-6 Retrieve Model Details

//Retrieve classification model from the DME
ClassificationModel treeModel = (ClassificationModel)dmeConn.retrieveObject
     ( "JDM_TREE_MODEL", NamedObject.model);
//Retrieve tree model detail from the model
TreeModelDetail treeDetail = (TreeModelDetail)treeModel.getModelDetail();
//Get the root node
TreeNode rootNode = treeDetail.getRootNode();
//Get child nodes
TreeNode[] childNodes = rootNode.getChildren();
//Get details of the first child node
int nodeId = childNodes[0].getIdentifier();
long caseCount = childNodes[0].getCaseCount();
Object prediction = childNodes[0].getPrediction();

Testing a Model

Once a supervised model has been built, it can be evaluated using a test operation. The JDM standard defines two types of test operations: one that takes the mining model as input, and the other that takes the apply output table with the actual and predicted value columns.

javax.datamining.supervised.TestTask is the base class for the model- based test tasks, and javax.datamining.supervised.TestMetricsTask is the base class for the apply output table-based test tasks.

The test operation creates and persists a test metrics object in the DME. For classification model testing, either of the following can be used.

javax.datamining.supervised.classification.ClassificationTestTask
javax.datamining.supervised.classification.ClassificationTestMetricsTask

Both of these tasks create the named object javax.datamining.supervised.classification.ClassificationTestMetrics and store it as a table in the user's schema.

The classification test metrics components, confusion matrix, lift results, and ROC associated with the ClassificationTestMetrics object are stored in separate tables whose names are the ClassificationTestMetrics object name followed by the suffix _CFM, _LFT, or _ROC. These tables can be used to display test results in dashboards, BI platforms such as Oracle BI, Business Objects, and so on.

Similarly for regression model testing, either of the following can be used:

javax.datamining.supervised.regression.RegressionTestTask
javax.datamining.supervised.regression.RegressionTestMtericsTask

Both these tasks create a named object javax.datamining.supervised.regression.RegressionTestMetrics and store it as a table in the user's schema.

The class diagram in Figure 7-6 illustrates the test metrics class hierarchy. It refers to Figure 7-4, "Task Class Diagram" for the class hierarchy of test tasks.

Figure 7-6 Test Metrics Class Hierarchy

Test metrics class hierarchy
Description of "Figure 7-6 Test Metrics Class Hierarchy"

Example 7-7 illustrates the test of a tree model JDM_TREE_MODEL using the ClassificationTestTask on the dataset MINING_DATA_TEST_V.

Example 7-7 Testing a Model

//Create & save PhysicalDataSpecification      
PhysicalDataSet testData = m_pdsFactory.create(
        "MINING_DATA_TEST_V", false );
PhysicalAttribute pa = m_paFactory.create("cust_id", 
        AttributeDataType.integerType, PhysicalAttributeRole.caseId );
testData.addAttribute( pa );
m_dmeConn.saveObject( "JDM_TEST_PDS", testData, true );
//Create ClassificationTestTaskFactory
ClassificationTestTaskFactory testTaskFactory =  
  (ClassificationTestTaskFactory)dmeConn.getFactory(
     "javax.datamining.supervised.classification.ClassificationTestTask");
//Create, store & execute Test Task
ClassificationTestTask testTask = testTaskFactory.create( 
        "JDM_TEST_PDS", "JDM_TREE_MODEL", "JDM_TREE_TESTMETRICS" );
testTask.setNumberOfLiftQuantiles(10);
testTask.setPositiveTargetValue(new Integer(1));
//Save TestTask object
dmeConn.saveObject("JDM_TEST_TASK", testTask, true);
//Execute test task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_TEST_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);
//Explore the test metrics after successful completion of the task
if(ExecutionState.success.equals(execStatus.getState())) {
  //Retrieve the test metrics object
  ClassificationTestMetrics testMetrics =  
          (ClassificationTestMetrics)dmeConn.getObject("JDM_TREE_TESTMETRICS");
  //Retrieve confusion matrix and accuracy
  Double accuracy = testMetrics.getAccuracy();
  ConfusionMatrix cfm = testMetrics.getConfusionMatrix();
  //Retrieve lift 
  Lift lift = testMetrics.getLift();
  //Retrieve ROC
  ReceiverOperatingCharacterics roc = testMetrics.getROC();
}  

In Example 7-7, a test metrics object is stored as a table called JDM_TREE_TESTMETRICS. The confusion matrix is stored in the JDM_TREE_TESTMETRICS_CFM table, lift is stored in the JDB_TREE_TESTMETRICS_LFT table, and ROC is stored in the JDM_TREE_TESTMETRICS_ROC table. You can use BI tools like Oracle Discoverer to query these tables and create reports.

Applying a Model for Scoring Data

All supervised models can be applied to data to find the prediction. Some of the unsupervised models, such as clustering and feature extraction, support the apply operation to find the cluster id or feature id for new records.

The JDM standard API provides an ApplySettings object to specify the type of output for the scored results. javax.datamining.task.apply.ApplySettings is the base class for all apply settings. In the Oracle Data Mining Java API, the ApplySettings object is transient; it is stored in the Connection context, not in the database.

The class diagram in Figure 7-7 illustrates the class hierarchy of the apply settings available in the Oracle Data Mining Java API.

Figure 7-7 Apply Settings

Apply settings class diagram
Description of "Figure 7-7 Apply Settings"

In the Oracle Data Mining Java API, default apply settings produce the apply output table in fixed format. The list in Table 7-1 illustrates the default output formats for different functions.

Table 7-1 Default Output Formats for Different Functions

Mining Function



Classification without Cost

Case ID

Prediction

Probability


Classification with Cost

Case ID

Prediction

Probability

Cost

Regression

Case ID

Prediction



Feature extraction

Case ID

Feature ID

Value



All types of apply settings support source and destination attribute mappings. For example, if the original apply table has customer name and age columns that need to be carried forward to the apply output table, it can be done by specifying the source destination mappings in the apply settings.

In the Oracle Data Mining Java API, classification apply settings support map by rank, top prediction, map by category, and map all predictions. Regression apply settings support map prediction value. Clustering apply settings support map by rank, map by cluster id, map top cluster, and map all clusters. Feature extraction apply settings support map by rank, map by feature id, map top feature, and map all features.

Example 7-8 illustrates the applying of a tree model JDM_TREE_MODEL using ClassificationApplyTask on the dataset MINING_DATA_APPLY_V.

Example 7-8 Applying a Model

//Create & save PhysicalDataSpecification      
PhysicalDataSet applyData = m_pdsFactory.create( "MINING_DATA_APPLY_V", false );
PhysicalAttribute pa = m_paFactory.create("cust_id", 
        AttributeDataType.integerType, PhysicalAttributeRole.caseId );
applyData.addAttribute( pa );
m_dmeConn.saveObject( "JDM_APPLY_PDS", applyData, true );
//Create ClassificationApplySettingsFactory
ClassificationApplySettingsFactory applySettingsFactory =  
  (ClassificationApplySettingsFactory)dmeConn.getFactory(
     "javax.datamining.supervised.classification. ClassificationApplySettings");
//Create & save ClassificationApplySettings
ClassificationApplySettings clasAS = applySettingsFactory.create();
m_dmeConn.saveObject( "JDM_APPLY_SETTINGS", clasAS, true);
//Create DataSetApplyTaskFactory
DataSetApplyTaskFactory applyTaskFactory =  
  (DataSetApplyTaskFactory)dmeConn.getFactory(
     "javax.datamining.task.apply.DataSetApplyTask");
//Create, store & execute apply Task
DataSetApplyTask applyTask = m_dsApplyFactory.create(
        " JDM_APPLY_PDS ", "JDM_TREE_MODEL", " JDM_APPLY_SETTINGS ", 
        "JDM_APPLY_OUTPUT_TABLE");
//Save ApplyTask object
dmeConn.saveObject("JDM_APPLY_TASK", applyTask, true);
//Execute test task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_APPLY_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);

Using a Cost Matrix

The class javax.datamining.supervised.classification.CostMatrix is used to represent the costs of the false positive and false negative predictions. It is used for classification problems to specify the costs associated with the false predictions.

In the Oracle Data Mining Java API, cost matrix is supported in apply and test operations for all classification models. For the decision tree algorithm, a cost matrix can be specified at build time. For more information about cost matrix, see Oracle Data Mining Concepts.

Example 7-9 illustrates how to create a cost matrix object where the target has two classes: YES (1) and NO (0). Suppose a positive (YES) response to the promotion generates $2 and the cost of the promotion is $1. Then the cost of misclassifying a positive responder is $2. The cost of misclassifying a non-responder is $1.

Example 7-9 Creating a Cost Matrix

//Create category set factory & cost matrix factory
CategorySetFactory catSetFactory = (CategorySetFactory)m_dmeConn.getFactory(
      "javax.datamining.data.CategorySet" );
CostMatrixFactory costMatrixFactory = (CostMatrixFactory)m_dmeConn.getFactory(
      "javax.datamining.supervised.classification.CostMatrix");
//Create categorySet
CategorySet catSet = m_catSetFactory.create(AttributeDataType.integerType);
//Add category values
catSet.addCategory(new Integer(0), CategoryProperty.valid);
catSet.addCategory(new Integer(1), CategoryProperty.valid);
//create cost matrix
CostMatrix costMatrix = m_costMatrixFactory.create(catSet);
costMatrix.setCellValue(new Integer(0), new Integer(0), 0);
costMatrix.setCellValue (new Integer(1), new Integer(1), 0);
costMatrix.setCellValue (new Integer(0), new Integer(1), 2);
costMatrix.setCellValue (new Integer(1), new Integer(0), 1);
//Save cost matrix in the DME
dmeConn.saveObject("JDM_COST_MATRIX", costMatrix);

Using Prior Probabilities

Prior probabilities are used for classification problems if the actual data has a different distribution for target values than the data provided for the model build. A user can specify the prior probabilities in the classification function settings, using setPriorProbabilitiesMap. For more information about prior probabilities, see Oracle Data Mining Concepts.


Note:

Priors are not supported with decision trees.

Example 7-10 illustrates how to create a PriorProbabilities object, when the target has two classes: YES (1) and NO (0), and probability of YES is 0.05, probability of NO is 0.95.

Example 7-10 Creating Prior Probabilities

//Set target prior probabilities
Map priorMap = new HashMap();
priorMap.put(new Double(0), new Double(0.7));
priorMap.put(new Double(1), new Double(0.3));
buildSettings.setPriorProbabilitiesMap("affinity_card", priorMap);

Embedded Transformations

In 11.1, OJDM supports embedding transformations with the model metadata. When the transformations are embedded with the model, they are implicitly applied to apply and test datasets. For example, user can embed a transformation that recodes the response attributes value representation from 1/0 to Yes/No; model uses this transformation when applying the model to the new data.

Users can specify these transformations as SQL expressions or can use the OJDM transformations discussed in Section 2.13 and build a transformation sequence.

In this section, the first example discusses the simple expression transformation using the oracle.dmt.jdm.transform.OraExpressionTransform class specified as input for model build.

The second example illustrates how to build a sequence of complex transformations and persist them as a transformation sequence and embed them into the model.

Embed Single-Expression Transformations

Using OraTransformationFactory user can create transformation objects such as OraTransformationSequence, OraExpressionTransform, OraBinningTransform, OraNormalizationTransform and OraClippingTransform.

In Example 7-11, we create an expression transform that defines a simple log transformation for age attribute, recode transformation for affinity_card attribute and explicit exclusion of original age attribute from the model build. The code illustrates using OJDM API how one can embed these simple SQL expression transformations with the model.

Example 7-11 Simple Expression Transformation

//Create OraT[XransformationFactory
OraTransformationFactory m_xformFactory = (OraTransformationFactory)m_dmeConn.getFactory(
      "oracle.dmt.jdm.transform.OraTransformation" );
//Create OraExpressionTransform from the transformation factory
OraExpressionTransform exprXform = m_xformFactory.createExpressionTransform();
  //1) Specify log transformation of age attribute and create a new attribute call log_age
  //   that can be used for mining
  exprXform.addAttributeExpression("log_age", //Expression output attribute name
                                  "log(10, age) as log_age", //Expression
                                  "power(10, log_age)" //Reverse expression
                                  );
  //2) Recode 1/0 values of the affinity card attribute with the yes/no values and replace 
  //   existing attribute with the new recoded attribute
  exprXform.addAttributeExpression("affinity_card", //Expression output attribute name
                                  "CASE WHEN AFFINITY_CARD = 1 THEN 'YES' ELSE 'NO' END ", 
                                  null //No explicit reverse expression
                                  );
  //3) Exclude age attribute from mining
  exprXform.addAttributeExpression("age", //Expression output attribute name
                                  null, //Specify expression as null 
                                //to exclude attribute from mining 
                                  null 
                                  );
//Create transformation sequence object using expression transformation
OraTransformationSequence xformSeq = m_xformFactory.createTransformationSequence(
        "MINING_DATA_BUILD_V", //Input table
        exprXform, //Expressions to be defined
        null //Output transformed view is specified as null as we are trying to 
             //embed the transformations to the model
      );
//Save transformation sequence object
m_dmeConn.saveObject("simpleExprXForm_jdm", xformSeq, true);
//Create build Task  with transformation sequence
BuildTask buildTask = m_buildFactory.create(
                     "inputPDS", //Build data specification
                     "inputBuildSettings", //Mining function settings name
                     "outputModel" //Mining model name
                     );                          
//Specify transformation sequence as one of the input to enable embedding
//of the transformations defined in the sequence with the model
//In this example only expression transformations are specified
((OraBuildTask)buildTask).setTransformationSequenceName("simpleExprXForm_jdm");
//Save and execute the build task
... 
//After successful model build specified transformations are embedded with the model
//User can retrieve the transformation details that are embedded with the model by calling 
//the following function in OraModel
OraExpressionTransform modelExmbeededTransforms = 
                     ((OraModel)model). GetModelTransformations();

Embed Complex Sequence of Transformations

In the previous example, we explored how to embed simple SQL expression transformations for trivial business transformations. In this section we will detail how a complex transformation sequence can be built using OJDM and embed these with the model.

OJDM 10.2 provides typical mining related individual transformations such as binning, normalization and outlier treatment (clipping). In 10.2 users have to maintain these transformations outside the modeling process and do the consistent transformations for the build, apply and test datasets outside the mining operations. This requires significant additional coding and maintenance of the transformation related objects by the end-user applications.

With the model embedded transformations capability, users can embed even complex transformation sequences such as first add business transformations and new attributes using the expression transforms (as discussed in the previous example), second treat outliers with the user specified clipping definitions and lastly normalize the data with the user specified normalization technique.

In OJDM new OraTransformationSequence object supports ability to specify sequence of transformations and convert these transformations into per attribute SQL expressions to embed them to the model. Example 7-12 illustrates using OJDM API how one can build a transformation sequence which uses the expression transform created in the previous example and extends it with the outlier and normalization data mining transformations and embed these complex transformation sequence with the model.

Example 7-12 Complex Sequence Transformations

//Create a list of transformations to be performed on the input mining data
List xformList = new ArrayList();
xfromList.add( exprXform );     //Expression transformation
xformList.add( clippingXform ); //Clipping transformation to treat outliers
xformList.add( normalizeXform );//Normalization transformation
//Create transformation sequence object using list of transformation
OraTransformationSequence xformSeq = m_xformFactory.createTransformationSequence(
        "MINING_DATA_BUILD_V", //Input table
        xformList, //List of transformations
        null //Output transformed view is specified as null as we are trying to 
             //embed the transformations to the model
      );
//Save transformation sequence object
m_dmeConn.saveObject("complexXFormSeq_jdm", xformSeq, true);
//Create transformation task with the transformation sequence
OraTransformationTaskFactory m_xformTaskFactory = 
       (OraTransformationTaskFactory)m_dmeConn.getFactory(
                   "oracle.dmt.jdm.task.OraTransformationTask");         
OraTransformationTask xformTask =  m_xformTaskFactory .create(
                 "complexXFormSeq_jdm",,   
                 false //boolean flag useTransformDefinitionTables
                 );
//Save and execute transformation task to populate transformation sequence with the
//SQL expressions necessary before embedding them to the build task
. . . .
//Create build Task with transformation sequence
. . . .
((OraBuildTask)buildTask).setTransformationSequenceName("complexXFormSeq_jdm ");
//Save and execute the build task with the embedded transformations
... 

Note that in both the examples we specified the output view of the transformation sequence as null to avoid creation of the database view that includes the transformations in the sequence. However, one can specify the view name to create a database view with the transformations and use this view as input to the model build to maintain the transformations outside the modeling process. OJDM API provides flexibility for the applications to choose the approach that best fits the need.

Using Predictive Analytics Tasks: Predict, Explain, and Profile

OJDM has oracle.dmt.jdm.task.OraPredictTask, OraExplainTask and OraProfileTask for data mining novice users to get predictions, to explain attributes importance and to discover profiles from the data.

Using OraPredictTask predictions are computed by just specifying the data location and the target column. This task learns from the known values in the target column and other columns in the input table and fills the unknown values in the target column with the predictions. This task hides all the data mining process done inside the database and produces the predictions and accuracy of the predictions.

Using OraExplainTask attributes ranking/importance with respect to an explain column. By just specifying the data location and explain column this task produces the attribute ranking table.

Using OraProfileTask profiles are discovered from the data for a given target attribute. For example, to find the profiles of the customers who respond to a product promotion, give the customers dataset with the customer attributes and promotion response attribute to the profile task. Profile task outputs a table with the profile definitions that applications can display to the users.

Both the tasks do automated data preparation where needed.

Example 7-13 illustrates how to execute predict, explain, and profile tasks.

Example 7-13 Predictive Analytics

//Get Predictive Analytics Task Factory object
   OraPredictiveAnalyticsTaskFactory  m_paFactory =
     (OraPredictiveAnalyticsTaskFactory)m_dmeConn.getFactory(
          "oracle.dmt.jdm.task.OraPredictiveAnalyticsTask");
//Predict task
   //Create predict task object
   OraPredictTask predictTask = m_paFactory.createPredictTask (
                     "MINING_DATA_BUILD_V", //Input table
                     "cust_id", //Case id column
                     "affinity_card", //target column
                     "JDM_PREDICTION_RESULTS"); //prediction output table
   //Save predict task object
   dmeConn.saveObject("JDM_PREDICT_TASK", predictTask, true);
   //Execute test task asynchronously in the database
   ExecutionHandle execHandle1 = dmeConn.execute("JDM_PREDICT_TASK");
   //Wait for completion of the task
   ExecutionStatus execStatus1 = execHandle1.waitForCompletion(Integer.MAX_VALUE);                         
//Explain task
   //Create explain task object
   OraExplainTask explainTask = m_paFactory.createExplainTask (
                     "MINING_DATA_BUILD_V", //Input table
                     "affinity_card", //explain column
                     "JDM_EXPLAIN_RESULTS"); //explain output table
   //Save predict task object
   dmeConn.saveObject("JDM_EXPLAIN_TASK", explainTask, true);
   //Execute test task asynchronously in the database
   ExecutionHandle execHandle2 = dmeConn.execute("JDM_ EXPLAIN_TASK");
   //Wait for completion of the task
   ExecutionStatus execStatus2 = execHandle2.waitForCompletion(Integer.MAX_VALUE);                         
//Profile task
   //Create profile task 
    OraProfileTask profileTask = m_paFactory.createProfileTask(
                         "MINING_DATA_BUILD_V", //Input table
                         "affinity_card", //Target column
                                 "JDM_PROFILE_RESULTS); //Profile output table
   //Save predict task object
   dmeConn.saveObject("JDM_PROFILE_TASK", profileTask, true);
   //Execute test task asynchronously in the database
   ExecutionHandle execHandle3 = dmeConn.execute("JDM_PROFILE_TASK");
   //Wait for completion of the task
   ExecutionStatus execStatus3 = execHandle3.waitForCompletion(Integer.MAX_VALUE);

Preparing the Data

In the Oracle Data Mining Java API, data must be prepared before building, applying, or testing a model. The oracle.dmt.jdm.task.OraTransformationTask class supports common transformations used in data mining: binning, normalization, clipping, and text transformations. For more information about transformations, see Oracle Data Mining Concepts.

The class diagram in Figure 7-8 illustrates the OraTransformationTask and its relationship with other objects.

Figure 7-8 OraTransformationTask Class Diagram

Class diagram of transformation objects
Description of "Figure 7-8 OraTransformationTask Class Diagram"

Using Binning/Discretization Transformation

Binning is the process of grouping related values together, thus reducing the number of distinct values for an attribute. Having fewer distinct values typically leads to a more compact model and one that builds faster, but it can also lead to some loss in accuracy.

The class diagram in Figure 7-9 illustrates the binning transformation classes.

Figure 7-9 OraBinningTransformation Class Diagram

Binning transformation class diagram.
Description of "Figure 7-9 OraBinningTransformation Class Diagram"

Here, OraBinningTransformation contains all the settings required for binning. The Oracle Data Mining Java API supports top-n, custom binning for categorical attributes, and equi-width, quantile and custom binning for numerical attributes. After running the binning transformations, it creates a transformed table and bin boundary tables in the user's schema. The user can specify the bin boundary table names, or the system will generate the names for the bin boundary tables. This facilitates the reusing of the bin boundary tables that are created for binning build data for apply and test data.

The following code illustrates the binning operation on the view MINING_BUILD_DATA_V

//Create binning transformation instance
OraBinningTransformFactory binXformFactory = 
   (OraBinningTransformFactory)dmeConn.getFactory(
      "oracle.dmt.jdm.transform.binning.OraBinningTransform");
OraBinningTransform binTransform = m_binXformFactory.create(
      "MINING_DATA_BUILD_V", // name of the input data set
      "BINNED_DATA_BUILD_V", // name of the transformation result 
      true); // result of the transformation is a view  
// Specify the number of numeric bins
binTransform.setNumberOfBinsForNumerical(10);
// Specify the number of categoric bins
binTransform.setNumberOfBinsForCategorical(8);
// Specify the list of excluded attributes
String[] excludedList = new String[]{"CUST_ID", "CUST_GENDER"};
binTransform.setExcludeColumnList(excludedList);
// Specify the type of numeric binning: equal-width or quantile
       ( default is quantile )
binTransform.setNumericalBinningType(binningType);
// Specify the type of categorical binning as Top-N: by default it is none   
binTransform.setCategoricalBinningType(OraCategoricalBinningType.top_n);
//Create transformation task
OraTransformationTask xformTask = m_xformTaskFactory.create(binTransform);
//Save transformation task object
dmeConn.saveObject("JDM_BINNING_TASK", xformTask, true);
//Execute transformation task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_ BINNING _TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE); 

Using Normalization Transformation

Normalizing converts individual attribute values in such a way that all attribute values lie in the same range. Normally, values are converted to be in the range 0.0 to 1.0 or the range -1 to +1. Normalization ensures that attributes do not receive artificial weighting caused by differences in the ranges that they span.

The class diagram in Figure 7-10 illustrates the normalization transformation classes.

Figure 7-10 OraNormalizeTransformation Class Diagram

Normalization transformation related classes.
Description of "Figure 7-10 OraNormalizeTransformation Class Diagram"

Here, OraNormalizeTransformation contains all the settings required for normalization. The Oracle Data Mining Java API supports z-Score, min-max, and linear scale normalizations. Normalization is required for SVM, NMF, and k-Means algorithms.

The following code illustrates normalization on the view MINING_BUILD_DATA_V.

//Create OraNormalizationFactory
OraNormalizeTransformFactory normalizeXformFactory = 
  (OraNormalizeTransformFactory)m_dmeConn.getFactory(
      "oracle.dmt.jdm.transform.normalize.OraNormalizeTransform");
//Create OraNormalization
OraNormalizeTransform normalizeTransform = m_normalizeXformFactory.create(
      "MINING_DATA_BUILD_V", // name of the input data set
      "NORMALIZED_DATA_BUILD_V", // name of the transformation result 
      true, // result of the transformation is a view
      OraNormalizeType.z_Score, //Normalize type
      new Integer(6) ); //Rounding number    
// Specify the list of excluded attributes
String[] excludedList = new String[]{"CUST_ID", "CUST_GENDER"};
normalizeTransform.setExcludeColumnList(excludedList);
//Create transformation task
OraTransformationTask xformTask = m_xformTaskFactory.create(normalizeTransform);
//Save transformation task object
dmeConn.saveObject("JDM_NORMALIZE_TASK", xformTask, true);
//Execute transformation task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_NORMALIZE_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);

Using Clipping Transformation

Some computations on attribute values can be significantly affected by extreme values. One approach to achieving a more robust computation is to either winsorize or trim the data using clipping transformations.

Winsorizing involves setting the tail values of a particular attribute to some specified value. For example, for a 90% winsorization, the bottom 5% are set equal to the minimum value in the 6th percentile, while the upper 5% are set equal to the value corresponding to the maximum value in the 95th percentile.

Trimming "removes" the tails in the sense that trimmed values are ignored in further values. This is achieved by setting the tails to NULL.

The class diagram in Figure 7-11 illustrates the clipping transformation classes.

Figure 7-11 OraClippingTransformation Class Diagram

Clipping transformation class diagram
Description of "Figure 7-11 OraClippingTransformation Class Diagram"

Here, OraClippingTransformation contains all the settings required for clipping. The Oracle Data Mining Java API supports winsorize and trim types of clipping.

The following code illustrates clipping on the view MINING_BUILD_DATA_V.

//Create OraClippingTransformFactory
OraClippingTransformFactory clipXformFactory = 
  (OraClippingTransformFactory)dmeConn.getFactory(
      "oracle.dmt.jdm.transform.clipping.OraClippingTransform");
//Create OraClippingTransform
OraClippingTransform clipTransform = clipXformFactory.create(
      "MINING_DATA_BUILD_V", // name of the input data set
      "WINSORISED_DATA_BUILD_V", // name of the transformation result 
      true );// result of the transformation is a view    
//Specify the list of excluded attributes
String[] excludedList = new String[]{"CUST_ID", "CUST_GENDER"};
clipTransform.setExcludeColumnList(excludedList);
//Specify the type of clipping
clipTransform.setClippingType(OraClippingType.winsorize);
// Specify the tail fraction as 3% of values on both ends
clipTransform.setTailFraction(0.03);
//Create and save transformation task
OraTransformationTask xformTask = xformTaskFactory.create(clipTransform);
//Save transformation task object
dmeConn.saveObject("JDM_CLIPPING_TASK", xformTask, true);
//Execute transformation task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_CLIPPING_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);

Using Text Transformation

Text columns need to be transformed to nested table structure to do the mining on text columns. This transformation converts the text columns to nested table columns. A features table is created by text transformation. A model build text data column features table must be used for apply and test tasks to get the correct results.

The class diagram in Figure 7-12 illustrates the text transformation classes.

Figure 7-12 Text Transformation Class Diagram

Text transformation class diagram
Description of "Figure 7-12 Text Transformation Class Diagram"

Here, OraTextTransformation is used to specify the text columns and the feature tables associated with the text columns.

The following code illustrates clipping on the table MINING_BUILD_TEXT.

//Create OraTextTransformFactory
OraTextTransformFactory textXformFactory = dmeConn.getFactory(
      "oracle.dmt.jdm.transform.text.OraTextTransform");
//Create OraTextTransform
OraTextTransform txtXform = (OraTextTransformImpl)textXformFactory.create(
      "MINING_BUILD_TEXT", // name of the input data set
      "NESTED_TABLE_BUILD_TEXT ", // name of the transformation result
      "CUST_ID", //Case id column
      new String[] { "COMMENTS" } ); //Text column names 
      );
//Create transformation task
OraTransformationTask xformTask = m_xformTaskFactory.create(txtXform);
//Save transformation task object
dmeConn.saveObject("JDM_TEXTXFORM_TASK", xformTask, true);
//Execute transformation task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_TEXTXFORM_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion
     (Integer.MAX_VALUE);
PKzndƶ[[PK-AOEBPS/models_deploying.htm Scoring and Deployment

6 Scoring and Deployment

This chapter explains how to use data mining models to mine your data.

This chapter contains the following sections:

In-Database Scoring

Scoring, the application of models to new data, is a primary objective of data mining. Once the models have been built, the challenges come in deploying them to obtain the best results, and in maintaining them within a production environment.

In traditional data mining, models are built using specialized software on a remote system and deployed to another system for scoring. This is a cumbersome, error-prone process open to security violations and difficulties in data synchronization.

With Oracle Data Mining, scoring is easy and secure. The scoring engine and the data both reside within the database. Scoring is an extension to the SQL language, so the results of mining can easily be incorporated into applications and reporting systems.

In-database mining provides security, backup and recovery, and high performance. It minimizes the IT effort needed to support data mining initiatives. Using standard database techniques, models can easily be refreshed (re-created) on more recent data and redeployed. The deployment is immediate since the scoring query remains the same; only the underlying model is replaced in the database.

What is Deployment?

Deploying a model means using it within a target environment. Model deployment could be:

  • Scoring data either for batch or real-time results

  • Extracting model details to produce reports. For example: the rules from a Decision Tree model, or the attribute rankings from an Attribute Importance model

  • Extending the business intelligence infrastructure of a data warehouse by incorporating mining results in applications or operational systems

  • Moving a model from the database where it was built to the database where it will be used for scoring (export/import)


See Also:

Oracle Data Mining Administrator's Guide for information about exporting and importing data mining models

Real-Time Scoring

Oracle Data Mining SQL functions enable prediction, clustering, and feature extraction analysis to be easily integrated into live production and operational systems. Because mining results are returned within SQL queries, mining can occur in real time.

With real-time scoring, point-of-sales database transactions can be mined. Predictions and rule sets can be generated to help front-line workers make better analytical decisions. Real-time scoring enables fraud detection, identification of potential liabilities, and recognition of better marketing and selling opportunities.

The query in Example 6-1 uses a Decision Tree model named dt_sh_clas_sample to predict the probability that customer 101488 will use an affinity card. A customer representative could retrieve this information in real time when talking to this customer on the phone. Based on the query result, the representative might offer an extra-value card, since there is a 73% chance that the customer will use a card.

Example 6-1 Real-Time Query with Prediction Probability

SELECT PREDICTION_PROBABILITY(dt_sh_clas_sample, 1 USING *) cust_card_prob
       FROM mining_data_apply_v
       WHERE cust_id = 101488;

CUST_CARD_PROB--------------    .727642276

Prediction

Oracle Data Mining supports six SQL functions that return results from predictive models (classification or regression).

Predictive models produce a target value for each row (case) in the scoring data. Each SQL function returns different information from the scoring results.


See Also:

Oracle Data Mining Concepts for information on classification and regression

Best Prediction

(Classification or regression). For classification, the PREDICTION function returns the target value that is predicted with the highest probability (or lowest cost, if costs are specified). For regression, PREDICTION returns the best predicted target value.

PREDICTION supports costs for classification. See "Cost-Sensitive Decision Making".


See Also:

Oracle Database SQL Language Reference for syntax and an example that uses PREDICTION

Confidence Bounds (GLM only)

(Classification or regression) The PREDICTION_BOUNDS function returns the upper and lower confidence bounds computed by the model.

Confidence is the degree of certainty that the true value (regression) or probability (classification) lies within the bounded interval. The default confidence is .95. Confidence can be specified by the user in the GLMS_CONF_LEVEL setting for the model. You can override the confidence associated with the model by specifying the confidence inline when you invoke the PREDICTION_BOUNDS function.

No confidence bounds are returned if ridge regression is being used by the algorithm.


See Also:


Costs

(Classification only) The PREDICTION_COST function returns the cost associated with the class that is predicted with the lowest cost. If you specify a class, the function returns the cost associated with that class.

Costs are a user-specified biasing mechanism for classification. See "Cost-Sensitive Decision Making".


See Also:

Oracle Database SQL Language Reference for syntax and an example that uses PREDICTION_COST

Rules (Decision Tree only)

(Classification only) The PREDICTION_DETAILS function returns the rule of a Decision Tree model corresponding to the given prediction. A rule is the condition (combination of attribute values) that leads to a specific classification.

Decision Tree rule identifiers are returned as XML. The full rules can be retrieved with the GET_MODEL_DETAILS_XML function.


See Also:


Probability

(Classification only) The PREDICTION_PROBABILITY function returns the probability associated with the best prediction (prediction with the highest probability) or the probability associated with the class that you specify.


See Also:

Oracle Database SQL Language Reference for syntax and an example that uses PREDICTION_PROBABILITY

Per-Class Results

(Classification only) The PREDICTION_SET function returns all the target classes, associated probabilities, and associated costs (if specified) for each scored row. You can specify parameters to restrict the output of the function.


See Also:


Clustering

Oracle Data Mining supports three SQL functions that return results when applying clustering models.

Clustering models assign each row to a cluster with an associated probability. Each SQL function returns different information from the scoring results.


See Also:

Oracle Data Mining Concepts for information on clustering

Cluster Identifier

The CLUSTER_ID function returns the identifier of the cluster predicted with the highest probability.


See Also:

Oracle Database SQL Language Reference for syntax and an example that uses CLUSTER_ID

Probability

The CLUSTER_PROBABILITY function returns the probability associated with the cluster to which cases are most likely to be assigned. If you specify a cluster ID, the function returns the probability associated with that cluster.


See Also:

Oracle Database SQL Language Reference for syntax and an example that uses CLUSTER_PROBABILITY

Per-Cluster Probabilities

The CLUSTER_SET function returns the probability associated with each cluster for each scored row. You can specify parameters to restrict the output of the function.

Feature Extraction

Oracle Data Mining supports three SQL functions that return results from feature extraction models.

Feature extraction models combine the attributes into a set of features that capture important characteristics of the data. The scoring process generates a value of each feature for each row. The value is a number that identifies the match quality of the case to the feature. Each SQL function returns different information from the scoring results.

Feature Identifier

The FEATURE_ID function returns the identifier of the feature with the highest value (match quality) for the data.


See Also:

Oracle Database SQL Language Reference for syntax and an example that uses FEATURE_ID

Match Quality

The FEATURE_VALUE function returns the highest feature value. If you specify a feature ID, the function returns the value of that feature.


See Also:

Oracle Database SQL Language Reference for syntax and an example that uses FEATURE_VALUE

Per-Feature Values

The FEATURE_SET function returns the values associated with each feature for each scored row. You can specify parameters to restrict the output of the function.


See Also:

Oracle Database SQL Language Reference for syntax and an example that uses FEATURE_SET

Save Scoring Results in a Table

If you wish to save the results of a scoring function, you can store them in a table.

This example shows how to save the results of scoring a customer response model.

UPDATE CUST_RESPONSE_APPLY_UPDATE
SET prediction = prediction(CUST_RESPONSE19964_DT using *),
     probability =  prediction_probability(CUST_RESPONSE19964_DT using *)

The table in question has all of the predictors, and has columns to hold the prediction and probability. The assumption is that any necessary transformations are embedded in the model (otherwise the using clause would need to contain them).

Cost-Sensitive Decision Making

Costs are user-specified numbers that bias classification. The algorithm uses positive numbers to penalize more expensive outcomes over less expensive outcomes. Higher numbers indicate higher costs. The algorithm uses negative numbers to favor more beneficial outcomes over less beneficial outcomes. Lower negative numbers indicate higher benefits.

All classification algorithms can use costs for scoring. You can specify the costs in a cost matrix table, or you can specify the costs inline when scoring. The PREDICTION, PREDICTION_COST, and PREDICTION_SET functions all support costs.

A sample cost matrix table is shown in Table 6-1.

Table 6-1 Sample Cost Matrix Table

ACTUAL_TARGET_VALUEPREDICTED_TARGET_VALUECOST

0

0

0

0

1

2

1

0

1

1

1

0


The cost matrix in Table 6-1 specifies costs for a binary target. The matrix indicates that the algorithm should treat a misclassified 0 as twice as costly as a misclassified 1. If the table name is cost_tbl and it is associated with the Naive Bayes model nb_sh_clas_sample, then the following query takes cost_tbl into account when scoring nb_sh_clas_sample. The output will be restricted to those rows where a prediction of 1 is less costly then a prediction of 0.

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
   FROM mining_data_apply_v
   WHERE PREDICTION (nb_sh_clas_sample COST MODEL
      USING cust_marital_status, education, household_size) = 1
   GROUP BY cust_gender
   ORDER BY cust_gender;

If there is a possibility that the cost matrix table is not present, or that a cost matrix was not specified for the model, you can use the AUTO keyword with COST MODEL so that scoring only uses costs if the cost matrix is available.

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
   FROM mining_data_apply_v
   WHERE PREDICTION (nb_sh_clas_sample COST MODEL AUTO
      USING cust_marital_status, education, household_size) = 1
   GROUP BY cust_gender
   ORDER BY cust_gender;

You can specify the costs inline when you invoke the scoring function. The inline costs are used for scoring even if a cost matrix table is associated with the model. Here is the same query with the costs specified inline.

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
   FROM mining_data_apply_v
   WHERE PREDICTION (nb_sh_clas_sample
                     COST (0,1) values ((0, 2),
                                        (1, 0))
                     USING cust_marital_status, education, household_size) = 1
   GROUP BY cust_gender
   ORDER BY cust_gender;

To associate a cost matrix table with a model for scoring, use the ADD_COST_MATRIX procedure in the DBMS_DATA_MINING package. You can retrieve the cost matrix with the GET_COST_MATRIX function. The REMOVE_COST_MATRIX procedure removes the cost matrix. If you want to use a different cost matrix table with a model, first remove the existing one then add the new one.

-- add cost matrix table cost_tbl
-- to model nb_sh_clas_sample
-- for scoring
--
EXEC DBMS_DATA_MINING.ADD_COST_MATRIX('nb_sh_clas_sample', 'cost_tbl');
--
-- replace cost_tbl with cost_tbl_2
--
EXEC DBMS_DATA_MINING.REMOVE_COST_MATRIX('nb_sh_clas_sample', 'cost_tbl');
EXEC DBMS_DATA_MINING.ADD_COST_MATRIX('nb_sh_clas_sample', 'cost_tbl_2');

The Decision Tree algorithm can use costs to bias the model build. If you want to create a Decision Tree model with costs, create a cost matrix table and provide its name in the CLAS_COST_TABLE_NAME setting for the model. If you specify costs when scoring the model, the cost matrix used to create the model will be used. If you want to use a different cost matrix table for scoring, first remove the existing cost matrix table then add the new one.

Batch Apply

Oracle Data Mining supports a batch apply operation that writes the results of scoring directly to a table. The columns in the table are mining function-dependent. The apply operation is accomplished by DBMS_DATA_MINING.APPLY.

APPLY creates an output table with the columns shown in Table 6-2.

Table 6-2 APPLY Output Table

Mining FunctionOutput Columns

classification

CASE_ID

PREDICTION

PROBABILITY

regression

CASE_ID

PREDICTION

anomaly detection (one-class SVM)

CASE_ID

PREDICTION

PROBABILITY

clustering

CASE_ID

CLUSTER_ID

PROBABILITY

feature extraction

CASE_ID

FEATURE_ID

MATCH_QUALITY


Example 6-2 illustrates anomaly detection with APPLY. The query of the APPLY output table returns the ten first customers in the table. Each has a a probability for being typical (1) and a probability for being anomalous (0).

Example 6-2 Anomaly Detection with DBMS_DATA_MINING.APPLY

EXEC dbms_data_mining.apply
        ('SVMO_SH_Clas_sample','svmo_sh_sample_prepared', 
         'cust_id', 'one_class_output'); 

SELECT * from one_class_output where rownum < 11;
 
   CUST_ID PREDICTION PROBABILITY
---------- ---------- -----------
    101798          1  .567389309
    101798          0  .432610691
    102276          1  .564922469
    102276          0  .435077531
    102404          1   .51213544
    102404          0   .48786456
    101891          1  .563474346
    101891          0  .436525654
    102815          0  .500663683
    102815          1  .499336317

Comparing APPLY and SQL Scoring Functions

Whether performed by APPLY or by a SQL scoring function, scoring generates the same mining results. Classification produces a prediction and a probability for each case; clustering produces a cluster ID and a probability for each case, and so on. The difference lies in the way that scoring results are captured and the mechanisms that can be used for retrieving them.

Since APPLY output is stored separately from the scoring data, it must be joined to the scoring data to support queries that include the data attributes being mined (the scored rows). Thus any model that will be used with APPLY must have a case ID.

A case ID is not required for models that will be applied with SQL scoring functions. Likewise, storage and joins are not required, since scoring results are generated and consumed in real time within a SQL query.

The SQL scoring functions offer flexibility. You can invoke the function that returns the specific information you need. You simply reference a model and identify the kind of mining results you want to retrieve.

PK6zPK-A OEBPS/lot.htmC List of Tables PKK`H C PK -Aoa,mimetypePK-AIs[V:iTunesMetadata.plistPK-AYuMETA-INF/container.xmlPK-A[pTOOEBPS/cover.htmPK-A:i(#OEBPS/whatsnew.htmPK-A"OEBPS/title.htmPK-A9ql 6OEBPS/loe.htmPK-A{ǟyEOEBPS/xform_text.htmPK-A1ɥfOEBPS/preface.htmPK-A +TTOEBPS/index.htmPK-AqgeF6A6HOEBPS/img/binning.gifPK-An*)1OEBPS/img/build_settings.gifPK-AreOEBPS/img/data_objects.gifPK-A OEBPS/img/text_transform.gifPK-A),gOEBPS/img/apply_settings.gifPK-ArhH|wOEBPS/img/test_metrics.gifPK-At2\ZZOEBPS/img/model_details.gifPK-Anp5?R:R]OEBPS/img/execute_tasks.gifPK-A}  # OEBPS/img/oratransformationtask.gifPK-Aq$$OEBPS/img/named_object.gifPK-AԤOEBPS/img/normalization.gifPK-A+1OEBPS/img/clipping.gifPK-Ac.$OEBPS/models_building.htmPK-ARHG=7OEBPS/api_tour.htmPK-A'ڲOEBPS/img_text/test_metrics.htmPK-AgqOEBPS/img_text/binning.htmPK-Aw!OEBPS/img_text/text_transform.htmPK-Al 2OEBPS/img_text/clipping.htmPK-A!OOEBPS/img_text/apply_settings.htmPK-A!uOEBPS/img_text/build_settings.htmPK-A9OEBPS/img_text/named_object.htmPK-AV0V OEBPS/img_text/execute_tasks.htmPK-A  OEBPS/img_text/model_details.htmPK-Au;j:OEBPS/img_text/data_objects.htmPK-AhN(pOEBPS/img_text/oratransformationtask.htmPK-A0ӵ OEBPS/img_text/normalization.htmPK-AtbbOEBPS/api_using.htmPK-AF<w r OEBPS/toc.ncxPK-A'}=&8&OEBPS/content.opfPK-AXv 6OEBPS/lof.htmPK-A_ >OEBPS/dcommon/prodbig.gifPK-AY@ +EOEBPS/dcommon/doclib.gifPK-A ppFOEBPS/dcommon/oracle-logo.jpgPK-AŷOEBPS/dcommon/contbig.gifPK-AOEBPS/dcommon/darbbook.cssPK-AMά""!OEBPS/dcommon/O_signature_clr.JPGPK-APz (OEBPS/dcommon/feedbck2.gifPK-A-OEBPS/dcommon/feedback.gifPK-Aː5OEBPS/dcommon/booklist.gifPK-AN61OEBPS/dcommon/cpyr.htmPK-A!:3.rOEBPS/dcommon/masterix.gifPK-AeӺ1,OEBPS/dcommon/doccd.cssPK-A7 cOEBPS/dcommon/larrow.gifPK-A#OEBPS/dcommon/indxicon.gifPK-AS'"OEBPS/dcommon/leftnav.gifPK-Ahu,cOEBPS/dcommon/uarrow.gifPK-Al-OJ~ OEBPS/dcommon/oracle.gifPK-A(OEBPS/dcommon/index.gifPK-AGC YOEBPS/dcommon/bookbig.gifPK-AJV^yOEBPS/dcommon/rarrow.gifPK-A枰pk OEBPS/dcommon/mix.gifPK-Ao"nR M G#OEBPS/dcommon/doccd_epub.jsPK-Av I -OEBPS/dcommon/toc.gifPK-A r~$//OEBPS/dcommon/topnav.gifPK-A1FA0OEBPS/dcommon/prodicon.gifPK-A3( # '4OEBPS/dcommon/bp_layout.cssPK-Ax[?:AOEBPS/dcommon/bookicon.gifPK-Ap*c^GOEBPS/dcommon/conticon.gifPK-AʍJOEBPS/dcommon/blafdoc.cssPK-A+&aOEBPS/dcommon/rightnav.gifPK-Aje88