Prédire l'avenir avec Oracle Database et les algorithmes d'Analyse Prédictive

Pour beaucoup, la Business Intelligence est équivalente à la production de rapports ou les requêtes adhoc par les utilisateurs. C’est vrai que les bases de données apportent de nombreux outils pour fournir aux utilisateurs, dans les meilleurs délais, les informations dont ils ont besoin. Elles présentent ainsi de la manière la plus adéquate possible ce qu’il s’est déjà « passé » aux utilisateurs et aux analystes. Pourtant, là où la Business Intelligence apporte une véritable plus value aux entreprises c’est lorsqu’elle parle de ce que pourrait être le « futur ». Simulations et prédictions permettent des retours sur investissement formidables… Avec les options Oracle OLAP et Oracle Data Mining, vos bases de données peuvent, avec un effort minimum, vous aider à mettre en oeuvre ce type d’approches.

Dans cet article, vous trouverez un exemple simple d’analyse prédictive avec Oracle Data Mining, le schéma SH, les API PL/SQL ou Oracle Data Miner. Évidemment les possibilités sont infinies mais, il faut bien commencer par introduire les choses, non ?

Quel est l’intérêt du Data Mining ?

Pour comprendre pourquoi la compétence métier se paie parfois à prix d’or, je vous propose l’extrait de la facture d’un de nos experts (généreusement prêtée par Olivier, mon patron). J’imagine que ça illustre assez bien l’intérêt de faire appel à la bonne personne :

Tourner une visse 5 Euros
Savoir quelle visse tourner 4995 Euros
TVA 980 Euros

Ainsi l’expert vous orientera vers la bonne solution en une fraction de seconde. Il augmentera votre efficacité et votre pertinence à travers la mise en place de règles d’expérience. Le data mining, qui s’appuie sur l’intelligence artificielle, comme les experts, permet de créer des modèles d’expérience, de classer, de corréler ou d’associer des évènements ou des informations des différents domaines métier. Parce qu’il explore des masses importantes de données, le Data Mining est un outil au service des experts. Il permet, par exemple, de détecter facilement des comportements typiques ou atypiques. Il permet, en quelques minutes, de tirer une expérience d’informations.

L’analyse prédictive est une sous partie du Data Mining. Elle consiste à construire à partir d’un ensemble de données une expérience et ainsi de prédire les choses. A quoi ça sert pour votre entreprise ou votre organisation ? A beaucoup de choses, en fait ! Voici quelques exemples de questions auxquelles l’analyse prédictive est capable d’apporter des éléments de réponse :

  • Quelles sont vos clients les plus susceptibles d’acheter un nouveau produit ?
  • Quels sont les criminels qui commettront le plus de crimes ?
  • Quelles opérations sont des fraudes ? Quels containers contiennent des produits de contrefaçon ?
  • Quelles pièces seront défectueuses sur vos véhicules ?
  • Quels sont les candidats qui s’intègreront les mieux à votre entreprise ?

Vous l’aurez compris, la plupart des services de votre entreprise peuvent bénéficier de l’analyse prédictive ou plus généralement du Data Mining : Marketing, Ventes, Qualité, Juridique, Sécurité, Finances, Ressources Humaines…

Et le gain n’est pas seulement théorique ! Vous trouverez ci-dessous un exemple repris couramment qui montre l’intérêt économique de l’analyse prédictive. Il s’agit ici d’une force de téléventes pour laquel le coût d’un appel infructueux est de 10€ alors que le gain d’une vente est de 500€. L’analyse prédictive peut vous permettre d’améliorer significativement votre taux de réponse positive à une campagne et de diminuer le nombre de vos appels infructueux. Imagnons ainsi que votre taux de transformation passe de 0,3% à 3% des appels, le tableau ci-dessous montre l’intérêt de la démarche pour 1000 appels :

Gain Unitaire Sans Analyse Prédictive Avec Analyse Prédictive
Taux de Transformation 0,3% 3%
Echecs -10€ -9970€ -9700€
Réussite 500€ 1500€ 15000€
Total des Gains -8479€ 5300€

Ai-je suscité votre intérêt ?

Préparer vos données pour l’analyse prédictive

Pour mettre en oeuvre l’exemple qui suit, installez le schéma d’exemple SH dans votre base de données. Une fois celui-ci installé, exécutez le SQL ci-dessous. Vous pourrez ainsi vous connecter à l’utilisateur SH et utiliser le moteur de data mining directement sur le schéma :

ALTER USER SH IDENTIFIED BY sh ACCOUNT UNLOCK;
GRANT CREATE JOB TO SH;
GRANT CREATE MINING MODEL TO SH;
GRANT CREATE PROCEDURE TO SH;
GRANT CREATE SEQUENCE TO SH;
GRANT CREATE SESSION TO SH;
GRANT CREATE SYNONYM TO SH;
GRANT CREATE TABLE TO SH;
GRANT CREATE TYPE TO SH;
GRANT CREATE VIEW TO SH;
GRANT EXECUTE ON ctxsys.ctx_ddl TO SH;

Note:
Dans un cas réel, vous préfèrerez créer un schéma dédié pour utiliser le data mining afin d’éviter de « polluer » vos données applicatives par des tables et des vues résultant de vos opérations de data mining

Dans l’exemple qui suit, nous nous proposons d’envoyer un courrier à nos clients à propos d’une promotion sur les jeux videos Y-BOX. Nous aimerions limiter le nombre d’envois et envoyer les courriers, en priorité, aux détenteurs d’une console Y-BOX. Pour cela vous sondez vos clients. Le résultat est stocké dans la table SH.SUPPLEMENTARY_DEMOGRAPHICS. Vous aimeriez maintenant connaître les critères à votre disposition dans votre programme de fidélité qui vous permettraient de cibler au mieux les clients susceptibles d’avoir une console Y-BOX.

Note:
La table SH.SUPPLEMENTARY_DEMOGRAPHICS n’est pas vraiment représentative d’un cas réel. En effet, vous vous rendrez compte que les propriétaires d’une Y-BOX représentent 100% d’une tranche d’age particulière. Ce point ne vous empêchera pas de comprendre le principe et l’intérêt de l’approche

Pour effectuer l’analyse, il faut créer une table ou une vue qui contiennent l’information que vous voulez prédire, ainsi que toutes les informations sur lesquelles vous pouvez vous appuyer pour la prédire. Cette table ou vue doit avoir un identifiant unique. Dans le script ci-dessous, vous trouverez un exemple de création d’une telle table qui contient :

  • le fait qu’une personne détient une console Y-BOX (la cible de votre prédiction)
  • un ensemble d’informations disponibles à travers votre programme de fidélité comme l’age, le sexe, le statut marital, la ville de résidence, une estimation des revenus, les autorisations de crédit.
  • une valeur de séquence pour identifier de manière unique les lignes de la table
create sequence ybox_pa_v_seq;

create table ybox_pa_t as
select ybox_pa_v_seq.nextval ybox_pa_id,
c.cust_id,
c.cust_gender,
to_char(c.cust_year_of_birth) year_of_birth,
c.cust_marital_status,
c.cust_income_level,
c.cust_city,
c.cust_credit_limit,
s.y_box_games
from supplementary_demographics s,
customers c
where c.cust_id=s.cust_id;

Remarque préalable à propos de l’Analyse Prédictive

L’algorithme d’analyse prédictive permet de prédire des valeur cibles à partir des données examinées (age, sexe,…). Dans le cas où la valeur cible est discrète (C’est le cas ici puisque « la possèder un jeu de Y-BOX » a 2 valeurs possibles qui sont 0 et 1), la prédiction est la valeur la plus probable en fonction des données en entrée.

Comme vous vous en rendrez compte si vous appliquez un algorithme de type « Decision Tree », « Possèder un jeu de Y-BOX » représente la majorité (en fait la totalité) de certains sous ensemble de notre table. Si jamais ce n’était pas le cas et que vous vouliez trouver les ensembles de populations dont plus de 10% « possèdent un jeu de Y-BOX », il suffirait d’augmenter artificiellement le nombre de cas positifs dans votre population en exécutant un ensemble de requêtes comme celle ci-dessous :

insert into ybox_pa_t
(select ybox_pa_v_seq.nextval,
cust_id,
cust_gender,
year_of_birth,
cust_marital_status,
cust_income_level,
cust_city,
cust_credit_limit,
y_box_games
from ybox_pa_t
where y_box_games=1)

commit;

En effet, si dans le cas original, il existe des ensembles de x pour cent positif, après l’insert, les mêmes ensembles auront désormais "2x/(1+x)" cas positifs. En itérant à partir de ce principe vous pourrez générer des ensembles de n*x/(1+(n-1)*x) lequel tend vers 100% lorsque n augmente puisque x est un pourcentage donc compris entre 0 et 1.

Analyse prédictive et API PL/SQL

Le package DBMS_PREDICTIVE_ANALYTICS constitue le package d’analyse prédictive ; en 11.2, ce package contient les procédures EXPLAIN, PREDICT et PROFILE. La première d’entre-elle permet d’apprécier la pertinence des colonnes sources pour prédire l’information cible. Vous trouverez ci-dessous un exemple d’utilisation de cette procédure :

drop table xplan_result purge;
set serveroutput on
BEGIN
DBMS_PREDICTIVE_ANALYTICS.EXPLAIN(
data_table_name =>'ybox_pa_t',
explain_column_name =>'y_box_games',
result_table_name =>'xplan_result');
END;
/

col attribute_name format a30
col explanatory_value format 9.9999
col rank format 9999
select attribute_name, explanatory_value, rank
from xplan_result
order by 3;

ATTRIBUTE_NAME EXPLANATORY_VALUE RANK
------------------------------ ----------------- -----
YEAR_OF_BIRTH .9942 1
CUST_MARITAL_STATUS .2729 2
CUST_INCOME_LEVEL .0109 3
CUST_GENDER .0061 4
YBOX_PA_ID .0000 5
CUST_ID .0000 5
CUST_CITY .0000 5
CUST_CREDIT_LIMIT .0000 5


PREDICT permet quant à elle d’estimer les résultats à partir des donnés source. Enfin, PROFILE fournit les règles associées à un algorithme de type arbre de décision pour réaliser l’estimation :

drop table profile_result purge;
set serveroutput on
BEGIN
DBMS_PREDICTIVE_ANALYTICS.PROFILE(
data_table_name =>'ybox_pa_t',
target_column_name =>'y_box_games',
result_table_name =>'profile_result');
END;
/

set longchunksize 2000
set long 2000
set lines 180
set pages 1000
col profile_id format 999
col record_count 999999
col description format a120
select *
from profile_result;

PROFILE_ID RECORD_COUNT DESCRIPTION
---------- ------------ --------------------------------------------------------------------
1 1406 <SimpleRule id="1" score="1" recordCount="1406">
<SimpleSetPredicate field="YEAR_OF_BIRTH" booleanOperator="isIn">
<Array type="string">
"1974" "1975" "1976" "1977" "1978" "1979" "1980"
"1981" "1982" "1983" "1984" "1985" "1986"
</Array>
</SimpleSetPredicate>
<ScoreDistribution value="1" recordCount="1406"/>
</SimpleRule>

[...]

Note:
Pour en savoir plus sur le package l’analyse prédictive, consultez « Oracle® Data Mining Concepts 11g Release 2 (11.2) – 3 Introducing Oracle Predictive Analytics » et l’information relative au package DBMS_PREDICTIVE_ANALYTICS

Analyse Prédictive avec Oracle Data Miner

Si vous n’êtes pas un grand fan des API PL/SQL, ou que vous êtes pressé, vous pouvez obtenir le même résultat grâce à Oracle Data Miner. Lancez le produit et connectez-vous à SH; sélectionnez la table « Data Sources » -> « SH » -> « Tables » -> « YBOX_PA_T » puis sélectionnez le menu « Data » -> « Explain… » :

  • Dans la première étape, vérifiez que la table SH.YBOX_PA_T est celle utilisée pour l' »EXPLAIN… »
  • Dans la seconde étape, choisissez Y_BOX_GAMES comme cible
  • Dans la troisième et dernière étape, nommez la table qui stockera le résultat de la commande : e.g. YBOX_PA_XPLAIN

Une fois l’opération réalisée, vous pouvez afficher le résultat en cliquant sur le lien « Outputs » de l’opération dans la console java comme ci-dessous :


Conclusion

Pour résumer cet exemple, même si les technologies mises en oeuvre relèvent de l’intelligence artificielle et d’algorithmes mathématiques parfois avancés, j’espère vous avoir fait touché du doigt à quel point, il peut être simple, sans rien changer d’utiliser Oracle Data Mining dans une organisation qui utilise Oracle. S’il n’y a que 2 choses à retenir, c’est surement que:

  • Le Data Mining peut faire entrer votre système décisionnel dans une autre dimension; Il donne tout leur sens aux mots Business Intelligence
  • Oracle Data Mining est très simple à mettre en oeuvre et, avec un peu d’aide et une idée précise des questions auxquelles vous voulez pouvoir répondre, c’est le travail de quelques heures ou quelques jours pour apporter de la valeur au métier

Qu’est-ce que vous en dites ?