Analisi Multicriteri con Microsoft Excel, in due versioni
- Scritto da Gianni Giaccaglini
- Add new comment
- dimensione font riduci dimensione font aumenta la dimensione del font
Analisi Multicriteri con Microsoft Excel, in due versioni
L’analisi multicriteri, che altri Autori chiamano "Calcolo delle preferenze", è una tecnica di Decision Support che agevola la scelta tra più alternative, caratterizzate da proprietà (criteri) comuni possedute in vario grado da ciascun elemento in gioco. Il decisore inoltre può – anzi, meglio, deve - tener conto del peso ossia dell’importanza che, a suo giudizio, pertiene a ciascun criterio, in quel dato contesto (su cui si suppone abbia adeguata competenza)...
Per non farla lunga, propongo un modello creato con Microsoft Excel, Multicrit.xlsm, in due ... salse, l’una sviluppata addirittura ai tempi d’oro di Lotus 123, l’altra creata più recentemente, semplificando e, insieme, ampliando il discorso al caso di criteri qualitativi non numerici. Lo si può scaricare, zippato in Multricrit.zip in: http://www.giannigiaccaglini.it/download/Multicrit.zip
Il vecchio modello nacque per emulare un software di nome Prefcalc, commercializzato con qualche esagerazione come Sistema Esperto. Mi resi presto conto che Excel possedeva tutti gli strumenti necessari e comunque anche oggi costituisce un mezzo di rapida prototipizzazione che un programmatore professionale, compreso il marchingegno, può tradurre, mutatis mutandis, in un eseguibile.
Esso è relativo alla scelta tra diverse auto. Il foglio si presenta, nell’intervallo A2:H10, come segue (non si sghignazzi per l’improbabile insieme di soggetti e criteri -Consumo, Velocità, Confort e Presso -, è solo un esempio didattico):
Nelle righe 2 e 3 in alto si hanno valori booleani VERO o FALSO e, rispettivamente, i pesi assegnati ai criteri delle colonne da Consumo a Prezzo della sottostante tabella, di coordinate A4:H10. I valori logici a riga 2 servono a discriminare se il valore elevato ci ciascun criterio costituisce un vantaggio o meno, per cui un consumo elevato è svantaggioso, al contrario della velocità.
Nelle celle intestate PuntNorm (punteggio normalizzato) si ha la formula seguente:
G5 =SOMMA(J5:M5)
che, come do per noto, nelle tabelle si replica, mutatis... referentibus, in tutte le celle del campo. Analogamente, nelle celle del Voto abbiamo:
H5=G5/MAX($G$5:$G$10)*10
Come si intuisce, tale formula riporta in voti da 1 a 10 il punteggio normalizzato.
Analoghe formule si trovano più in basso, che lascio per esercizio a chi legge:
IDEALE |
10 |
250 |
8 |
100 |
6,611161111 |
10,00 |
PERDENTE |
45 |
100 |
5 |
1000 |
3,002474136 |
4,54 |
Hanno lo scopo di verificare il punteggio e il voto del concorrente IDEALE (che, come è scontato, si aggiudica un dieci) e del PERDENTE.
Il clou del meccanismo si trova sulla destra del foglio, a partire da J2:
FALSO |
VERO |
VERO |
FALSO |
5 |
2 |
1 |
5 |
Consumo |
Velocità |
Comfort |
Prezzo |
0,0111111 |
2 |
1 |
0,00005 |
0,0024691 |
5 |
1,6 |
0,000005 |
0,0079365 |
3,6 |
1,4 |
3,3333E-05 |
0,0074074 |
3,5 |
1,5 |
0,00003125 |
0,008547 |
3,4 |
1,5 |
2,9412E-05 |
0,0092593 |
3,2 |
1,2 |
2,8571E-05 |
Le prime due righe contengono formule =C2, =D2,... =F2 e =C3, =D3,... =F3 che replicano booleani e pesi.
La formula basilare, che elabora i valori normalizzati è la seguente:
J5:M10=SE(J$2;C5;1/C5)/J$14*J$3
È stata ottenuta con questa manovra: 1. Selezione dell’intervallo J5:M10; 2. Digitazione di =SE(J$2;C5;1/C5)/J$14*J$3 nella cella J5; 3. Consolidamento in J5:M10 mediante Ctrl+Invio anziché il semplice Invio.
A questo punto spero che l’intelligente visitatore cui mi rivolgo comprenda da solo che la funzione =SE discrimina a seconda dei booleani, il valore o, al contrario, il suo inverso, moltiplicando il risultato per ciascun peso. Si torni infine alle formule dei campi PuntNorm e Voto che riproduco a beneficio degli oblomoviani (pigri, in volgare). Restituiscono la sommatoria dei valori normalizzati e, rispettivamente, li riducono a voti da 1 a 10:
G5 =SOMMA(J5:M5)
H5=G5/MAX($G$5:$G$10)*10
Multicriteri semplificata
Il modello fin qui descritto fu sviluppato rispettando pari pari i canoni dell’Analisi Multicriteri. In una notte di mezza estate non mi è apparso in sogno nessun folletto, ma mi è venuta un’ideuzza banale. Che bisogno c’è di tanto patire, visto che è pur sempre in ballo un decisore, che tra l’altro deve decidere (sennò che decisore è?) a ragion veduta e saputa i pesi da attribuire? Lasciamogli anche laresponsabilità di assegnare dei voti!
Detto e fatto, il modello semplificato si presenta, sul secondo foglio di lavoro, così:
Sottolineo che tale intervallo è stato impostato in forma di tabella (con l’opzione, ricordo, Tabella dalla scheda Dati).Stavolta i nomi dei criteri sono nella riga in alto e sotto ad essi si hanno i vari pesi, posti nella stessa colonna dei vari Voto1, Voto2 ecc. che l’utente deve fissare esaminando i corrispettivi Valore1, Valore2 e così via. Una variante rispetto al modello precedente è che stavolta si possono avere anche valori di tipo qualitativo, come d’altronde prevede la teoria completa.
Sulla destra dello stesso Foglio1, fuori vista, sono riportati diversi valori e indicazioni testuali predefiniti. I primi sono relativi ai Voti e ai Pesi. Limitandoci ai Pesi si ha:
Voti |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Mentre l’intervallo Pesi comprende numeri da 1 a 5. Ai due intervalli ho assegnato i nomi di zona Voti e Pesi, per ovvii motivi. Alle celle a riga 2, affiancate da label da Peso1 a Peso4 ho invece dato nomi per l’appunto da Peso1 a Peso4 (usati più avanti per il punteggio finale).
Attivando ognuna di tali celle vi compare una casella a discesa con tipici pulsanti laterali cagendo sui quali quali si apre un elenco da 1 a 5 che limita la scelta dei valori leciti, pena il rifiuto con tanto di severo avviso da parte di Excel. Questo e altri analoghi risultati che stiamo per vedere sono stati ottenuti con il comando del menu Dati seguito da Convalida dati con opzione Elenco e infine specificando l’intervallo che interessa, o meglio il suo nome, Voti.
Così per il criterio SUPERFICIE in ciascuna cella del campo Voto2 la casella a discesa limita i valori da 1 a 9 attinti dai Pesi.
Trattamento dei criteri di tipo testuale
Sempre alla destra del Foglio2 si notano le tabelline seguenti, inerenti ai criteri POSIZIONE e ARREDO
Indicazione 1 |
Valori1 |
|
Indicazione 4 |
Valori4 |
Centrale |
9 |
|
Elegante |
8 |
Fuori centro |
7 |
|
Modesto |
4 |
Fuori città |
5 |
|
Normale |
6 |
Periferico |
6 |
|
Sofisticato |
9 |
Zona VIP |
10 |
|
|
|
|
|
|
|
|
NOTA BENE: le indicazioni da “Centrale” a “Zona VIP” e quelle da “Elegante” a “Sofisticato” debbono essere in ordine crescente, come richieda la funzione Excel CERCA che stiamo per vedere. Ricordarsi di usare il comando Dati > Ordina se necessario.
Come è facile comprendere, ai dati della prima colonna corrispondono, sulla seconda, valori ossia voti, diciamo così, standard che l’utilizzatore dovrà fissare a suo giudizio in fase di progetto. I nomi qui assegnati sono Indicazione1, Valori1 e Indicazione4, Valori4, di cui tutti fin d’ora intuiscono il ruolo. Infatti nelle celle del campo Valori1 dell’Elenco1 si danno caselline che limitano l’input a “Centrale”, “Fuori centro”,... , “Zona VIP”. Il bello si ha nella colonna accanto che in A4 reca la formula seguente che restituisce il valore che corrisponde a una certa Indicazione1.
=CERCA(B4;Indicazione1;Valori1)
replicata automaticamente, mutando il solo indirizzo, da B4 a C4, D4 ecc. in tutte le celle sottostanti, come avviene in tutte le tabelle come la nostra Tabella1.
NOTA. Ricordo che la funzione CERCA, se dotata del terzo argomento (facoltativo) restituisce il dato presente in tale intervallo, Valori 1 nel nostro caso (v. se occorre la Guida Excel).
Analoga la situazione relativa al criterio ARREDO, di cui mi limito a riportare la formula in H4 (a buon intenditor altre parole non servono):
=CERCA(H4;Indicazione4;Valori4)
E l’intervallo CANONE+SPESE? In questo caso ho preferito legare il campo Valore3 all’elenco Voti. Scelta discutibile, anzi un po’ sofferta. Infatti per un verso siamo di fronte a una situazione in cui al valore più elevato corrisponde massimo svantaggio e, in linea di principio, avrei potuto adottare la tecnica testé vista con la posizione e l’arredo, semplicemente fissando valori congrui (del genere ultimi = primi). Ma questo è un caso particolare, perché ritengo che non si possa dare un voto a prescindere da altri criteri. Di conseguenza ho lasciato totale responsabilità all’utente che, insisto, si presume che conosca il settore.
Infine il Valore totale in questa versione è semplicemente dato dalla somma dei prodotti peso x voto.,Chi volesse ottenere la normalizzazione del caso canonico può anche farlo, ma a mio modesto avviso a che servirebbe?
La formula facilmente riscontrabile nel penultimo campo di Tabella1 è la seguente:
=[@Voto1]*peso1+[@Voto2]*peso2+[@Voto3]*peso3+[@Voto4]*peso4
Di cui si può apprezzare la sinteticità, permessa dagli oggetti tabella, ove una sintassi tipo [@Voto1] si adegua automaticamente nelle celle degli altri record. Equivale, se si riflette, a indirizzi del tipo $A1, ove il riferimento alla colonna è fisso mentre varia la riga.
Nel Foglio1 si ha un grafico a torta incorporato, che evidenzia le percentuali relative alle varie fette. Nel foglio per grafico Grafico2 se ne ha un altro a barre. Entrambi sono stati ottenuti selezionando preliminarmente in modo discontinuo i campi della Sede negozio e del Valore totale
E le macro? Con entrambi i modelli proposti non ne ho ravvisato la necessità. Chi ci tenesse potrebbe prevedere routine VBA più o meno sofisticate, ad esempio per inserire o togliere colonne mentre per i concorrenti conviene sfruttare l’automatismo delle tabelle. Analogamente sarebbe facile inserire un pulsante che lancia una macro per ordinare in senso decrescente la tabella sulla base del voto o valore complessivo. Ma ne conviene? Direi di no, visto che, come solo i più sprovveduti ignorano, con le più volte lodate tabelle basta un clic sulla frecciotta del campo per attivare l’opzione di ordinamento meritocratico (ossia decrescente).
Per puro amore di una variante, altresì con valenza comparativa, ho poi creato una funzione d’utente volta a ottenere, nel campo ValTotBis, il gemello di quello del Valore totale. La riporto senza commenti, affidandola all’esegesi autogestita dei più esperti:
Function ValoreTotale(ZonaVal As Range, ZonaPesi)
Dim ValTot As Double, i As Integer
ValTot = 0
' Il passo 2 salta da voto a voto…
For i = 1 To ZonaVal.Count Step 2
ValTot = ValTot + ZonaVal(i) * ZonaPesi(i)
Next
ValoreTotale = ValTot
End Function
Va da sé che, applicata alle celle del campo ValTotBis, si esprime con =ValoreTotale(C4:I4;$C$2:$I$2) e seguenti.
Ulteriore perfezionamento
Ultimissimo suggerimento. Come si è detto, il comando Convalida Dati con l’opzione Elenco dà origine a un avvertimento standard se l’utente sgarra. Volendo si può personalizzare tale messaggio scegliendo la tab Messaggio di errore nella finestra Convalida dati, inserendo infine nella casella specifica testi come “Il valore deve variare da 1 a 9”.
Per chi ama le macro... e per mera curiosità ecco infine il frutto della registrazione relativa al fissaggio di un elenco applicato al nostro intervallo Pesi:
Sub Macro2()
' Range("C2").Select
With ActiveCell.Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Pesi"
.IgnoreBlank = True
.InCellDropdown = True
' .InputTitle = ""
' .ErrorTitle = ""
' .InputMessage = ""
' .ErrorMessage = ""
' .ShowInput = True
.ShowError = True
End With
End Sub
Al posto di Selection. Validation è stato messo ActiveCell.Validation traducendo in commento Range(“C2”).Select, in modo che la macro si applichi a una (qualunque) cella attiva. I più esigenti potrebbero tramutare Macro2 in una più flessibile Sub Convalida( Celle As Range, Elenco As Range). Quanto alle altre istruzioni tradotte in commenti le si è così, di fatto, annullate in quanto rivelatesi pleonastiche nei casi normali. Eventualmente si potrebbe stabilire un ErrorMessage = “Valore illecito!”...