# Predictive Model Markup Language

Il Predictive Model Markup Language (PMML) è un linguaggio di markup aperto basato su XML, sviluppato dal Data Mining Group (DMG), concepito per permettere la descrizione di modelli di analisi predittiva che possano essere condivisi tra sistemi ed applicazioni diversi. PMML è uno standard de facto, che ha avuto origine nel 1997.
Da quando PMML è uno standard basato su XML, le specifiche sono XML Schema.

## Componenti PMML

PMML segue una struttura intuitiva per descrivere un modello di data mining, che sia esso un modello di rete neurale artificiale o un modello di regressione logistica.
La struttura può essere descritta dai seguenti componenti:
* Header: contiene informazioni generali circa il documento PMML, come informazioni sul copyright del modello, sua descrizione e informazioni riguardo l'applicazione (nome e versione) usata per generarlo. Contiene anche un attributo di tipo timestamp il quale può essere usato per specificare la data della creazione del modello.
* Data Dictionary: contiene le definizioni di tutti i possibili campi usati dal modello. Qui è definito il campo come continuo, categorico o ordinale (attributo optype). Da questa definizione dipende l'appropriata valutazione del range che è definito dopo il tipo di dato (come string e double).
* Data Transformations: trasformazioni che consentono il mappaggio di dati in diverse forme, per essere usate dal modello di mining. PMML definisce cinque trasformazioni:
** Normalization: mappa i valori a numeri, l'input può essere continuo o discreto.
** Discretization: mappa valori continui in valori discreti.
** Value mapping: mappa valori discreti in valori discreti.
** Functions: deriva un valore dall'applicazione di una funzione con uno o più parametri.
** Aggregation: usata per sintetizzare o collezionare gruppi di valori.
* Model: contiene la definizione del modello di data mining. La multi-layered feedforward neural network è la più comune rappresentazione rete neurale nelle odierne applicazioni, che ha conquistato la popolarità grazie all'efficienza data dall'algoritmo di training conosciuto come backpropagation. Una rete è rappresentata in PMML da un elemento "NeuralNetwork" il quale contiene attributi come:
** Nome del modello (attributo modelName)
** Nome funzione (attributo functionName)
** Nome algoritmo (attributo algorithmName)
** Funzione di attivazione (attributo activationFunction)
** Numero di strati (attributo numberOfLayers)
Queste informazioni sono seguite da un albero che modella gli strati neurali i quali specificano l'architettura del modello di rete neurale. Questi attributi sono NeuralInputs, NeuralLayer, e NeuralOutputs. Accanto alla rete neurale, PMML consente la rappresentazione di altri tipi di modelli di data mining come: macchine a vettori di supporto, regole di associazione, classificatore bayesiano, clustering models, text models, alberi di decisione e differenti modelli di regressione.
* Mining Schema: lo schema di mining elenca tutti i campi usati nel modello. Questo può essere un sottoinsieme dei campi definiti nel dizionario. Contiene informazioni specifiche di ogni campo, come:
** Nome (attributo name): deve riferirsi a un campo del dizionario
** Tipo d'uso (attributo usageType): definisce il modo di utilizzo di un campo nel modello. Tipicamente i valori sono: active, predicted, e supplementary. I campi Predicted sono quei valori interi predetti dal modello.
** Trattamento estremo (attributo outliers): definisce i trattamenti estremi che possono essere utilizzati. In PMML, gli estremi (outliers) possono essere trattati come valori mancanti, come valori estremi (basati sulla definizione di massimo e minimo valore del particolare campo, o lasciandoli inalterati).
** Politica di rimpiazzamento del valore (attributo missingValueReplacement): se questo attributo è specificato dopo un valore mancante è automaticamente rimpiazzato da un valore calcolato.
** Trattamento valore mancante (attributo missingValueTreatment): indica come il valore di rimpiazzamento è derivato (es. come valore, media o mediana).
* Targets: consente nel post-processing dei valori predetti di fare operazioni di scalatura se l'output del modello è continuo. Targets possono essere anche usati per classificare compiti. In questo caso l'attributo priorProbability specifica una probabilità di default per la categoria target corrispondente. Esso è usato se la predizione logica non produce un risultato. Questo può accadere, per esempio, se un valore di input è mancante e questo e non è presente un metodo di trattamento dei valori mancanti.
* Output: Questo elemento può essere usato per nominare tutti i campi di output desiderati aspettati dal modello. Le caratteristiche del campo predetto sono tipicamente i valori predetti, la probabilità, affinità cluster (per modelli clustering), errore standard, etc.

## Storia dei rilasci

| Versione | Data di rilascio |
| Versione 0.7 | luglio 1997 |
| Versione 0.9 | Luglio 1998 |
| Versione 1.0 | Agosto 1999 |
| Versione 1.1 | Agosto 2000 |
| Versione 2.0 | Agosto 2001 |
| Versione 2.1 | Marzo 2003 |
| Versione 3.0 | Ottobre 2004 |
| Versione 3.1 | Dicembre 2005 |
| Versione 3.2 | Maggio 2007 |
| Versione 4.0 | Giugno 2009 |
| Versione 4.1 | Dicembre 2011 |
| Versione 4.2 | Febbraio 2014 |
| Versione 4.2.1 | Marzo 2015 |
| Versione 4.3 | Agosto 2016 |