Esempi pratici e misura delle performance

Per analizzare le performance dell’algoritmo Perceptron prendiamo in esame un dataset molto studiato nell’ambito della machine learning: l’insieme delle caratteristiche della lunghezza e larghezza dei petali capaci di riconoscere una particolare famiglia Iris.

Per fare questo ci serviremo di importanti librerie di scikit-learn

anzitutto preleviamo il dataset

# load dataset
iris = datasets.load_iris()
X = iris.data[:, [2, 3]]
y = iris.target

definiamo tramite le funzioni di scikit-learn il training-set ed il testing-set e standardiziamo i campioni

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4, random_state = 1, stratify = y)

sc = StandardScaler()
sc.fit(X_train) # calculate mu and sigma
X_train_std = sc.transform(X_train) # standardize
X_test_std = sc.transform(X_test)

utiliziamo il perceptron per risolvere il problema della classificazione e misuriamone le performance rappresentando i dati su un grafico. Parametriziamo il Perceptron con un numero di epoch pari a 50 ed un tasso di apprendimento pari a 0.2.

ppn = Perceptron(max_iter = 50, eta0 = 0.2, tol = 1e-3, random_state = 1)
ppn.fit(X_train_std, y_train)
y_pred = ppn.predict(X_test_std)
err =(y_test != y_pred).sum()
acc=(y_test == y_pred).sum() / len(y_test)

plt.plot(err)
plt.xlabel('wrong classification')
plt.show()

risultato:

y label count : [50 50 50]
y_train label count : [35 35 35]
y_test label count : [15 15 15]
wrong sample : 3
perceptron accurancy : 0.931

rappresentazione grafica dei dati.

dataset Iris

Una tecnica per misurare le performance di un modello è selezionare gli iperparametri di un algoritmo (ovvero i parametri che rendono l’algoritmo più efficiente rispetto la stima che si vuole avere) si chiama K-Fold.

La tecnica consiste nel suddividere il dataset in k parti senza reinserimento. K-1 viene usato per il test di addestramento, la restante parte viene usata per il test.

Per ogni fold viene calcolata la prestazione del modello ed infine viene calcolata la media delle prestazioni per tutti i fold. Vedi figura.

K-fold

#searching performance

#K-FOLD Stratified
skf = StratifiedKFold(n_splits=2)
skf.get_n_splits(X, y)

print(skf)

scores=[]


for train_index, test_index in skf.split(X, y):
        print("data train:", train_index, "data test:", test_index)
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]
        pipe_lr.fit(X_train, y_train)
        score=pipe_lr.score(X_test,y_test)
        scores.append(score)
        print('test accurancy: %.3f ' %score)
print ('total accourancy: %.3f +/- %.3f ' %np.mean(scores), np.std(scores))


#CROSS VALIDATION SCORE
from sklearn.model_selection import cross_val_score
scores = cross_val_score(estimator=pipe_lr, X=X_train, y=y_train, cv=10, n_jobs=1)

print ('total accourancy: %.3f +/- %.3f ' %np.mean(scores), np.std(scores))

Il risultato

Class label : [0 1 2]
y label count : [50 50 50]
y_train label count : [35 35 35]
y_test label count : [15 15 15]
wrong sample : 3
perceptron accurancy : 0.93

Analisi delle performance

Nell’informatica gestionale una delle caratteristiche più importanti non è soltanto il supporto operativo ma anche il supporto direttivo strategico.
Sulla base dei dati a livello produttivo il sistema ci dovrà fornire gli strumenti necessari per supportare processi decisionali e soprattutto strategici aziendali.

Faccio un esempio. Un’azienda ha come Business Core la vendita di particolari prodotti per un particolare target di clienti.

La direzione ha deciso di acquisire un sistema informatico che supportasse in maniera adeguata tutto il ciclo attivo a livello operativo: ordini di vendita, spedizione e fatture verso il cliente.

Supponiamo che questo sistema permetta di studiare particolari performance aziendali sulla base dei dati raccolti a livello operativo.

Ad esempio, supponiamo che il sistema ci rendesse visualizzabile giornalmente (tramite un cruscotto) il numero dei prodotti venduti e ci segnalasse via email i casi in cui il livello delle vendite sia sceso sotto una certa soglia.
In questo modo si darebbe un adeguato supporto ai processi decisionali perché oltre ad avere una immediata rappresentazione delle vendite è possibile intervenire subito per correggere probabili anomalie nel processo di vendita.

Inoltre, se i dati sono stati correttamente registrati a livello operativo si potrebbero prendere anche decisioni strategiche con effetto a lungo periodo. Ad esempio, attraverso la visualizzazione delle performance abbiamo scoperto che in un determinato periodo si vendono più prodotti verso una specifica zona geografica. La prossima volta potremo attrezzare la struttura aziendale in modo da supportare le vendite verso quella determinata area geografica in quel preciso periodo.

Un gestionale integrato dovrebbe già possedere queste funzionalità aggiuntive di supporto. I software costruiti ad-hoc  invece dovranno svilupparli da zero.

Per rendere ancora più chiaro ciò di cui sto parlando farò un esempio pratico attraverso il gestionale ERP Adempiere nella pagina In Pratica…