Archivi categoria: Ingegneria

A/B Test spiegato al Nerd che vuole rimorchiare su Tinder

Ti sei appena comprato l’ultimo profumo, l’addome non è proprio scolpito, la barba è perfetta, ma l’unico match che sei riuscito ad ottenere su Tinder è con il profilo finto della Mucca Carolina iscritta dal tuo amico Marco anche noto come “Il Capraro”.

Inizi a riflettere che forse c’è un problema.

Questa strategia del rimorchio non sta funzionando, evidentemente.

Decidi di affidarti al tuo amico, il mago della conquista, il re del rimorchio dai tempi di MySpace e Netlog, per gli amici “Er Trivella”.

Dopo una veloce chiacchierata ed un paio di birre, Er Trivella, decide di aiutarti, ma solo se sei disposto a pagargli da bere in caso di successo.

Subito si accorge che la tua selezione di foto profilo a petto nudo con la mutanda “Uomo” comprata in pacchi da 10 al mercato non può andar bene, così come deve essere aggiornata l’altra tutta sfocata e con il volto devastato dagli shoot di Ibiza 2k12.

“Terapia d’urto” queste le parole di “Er Trivella” in un momento di grande sconforto e compassione nei tuoi confronti.

Shopping selvaggio tra Piazza Italia e OVS, foto con la reflex in modalità automatico fatte dall’amica fotografa e frasi random di Fabio Volo.

Subito dopo l’aggiornamento del profilo iniziano i match e stenti a crederci.

Tu però non vuoi offrire da bere, pensi sia tutto frutto del caso, che “Er Trivella “ sia stato fortunato.

Con le vecchie foto profilo -> 100 tentativi ->1 match

Con le nuove foto profilo ->100 tentativi -> 10 Match

Guardi Er Trivella e con un po’ di sfacciataggine dici

“Guarda secondo me è solo un caso, con le nuove foto di profilo è stata solo fortuna, l’ipotesi che sia cambiato qualcosa è falsa”

Er Trivella ti guarda negli occhi, non gli pare vero, lui vuole che gli paghi da bere e con calma risponde:

“Ok allora facciamo così se è vero che è stata solo fortuna non cambia nulla tra la situazione prima e la situazione successiva.

Noi abbiamo 200 tentativi in totale giusto?”

Tu:”Si”

Er Trivella:”Facciamo delle simulazioni.

Prendiamo 200 foglietti scriviamo sopra questi il nome della tipa e se hai avuto successo o meno.

1 se hai avuto successo e 0 se non è andata bene”.

Alla strana richiesta realizzi questi 200 foglietti.

Er Trivella:”Ora per un bel po’ di volte mischiamo i 200 foglietti, associamo i primi 100 alla vecchia condizione (Test A) e gli ultimi 100 a quella nuova (Test B).

Una volta fatto calcoliamo la differenza tra i casi di successo tra il nuovo caso B’ ed il nuovo caso A’, chiameremo questo valore “Delta Rimorchio”.

Ti ricordi nel caso originale questa differenza era di 0.09?” (10/100-1/100)

“Una volta calcolato il “Delta Rimorchio” la seconda volta, rimischiamo i foglietti e ripetiamo l’operazione un certo numero di volte (un numero di volte n, con n molto grande).

Ora se quello che hai detto ha senso le volte in cui rimischiando i foglietti il delta rimorchio è uguale o maggiore al delta rimorchio iniziale dovrà essere abbastanza frequente, essendo questa differenza un caso”

Tu:”Certo, ha senso”

Er Trivella: “Potremmo valutare la cosa dividendo il numero di volte in cui “Delta rimorchio è maggiore o al più uguale” per il numero di volte che abbiamo rimischiato i foglietti” (questo valore sarà il nostro p-value dei dati).

Er Trivella:”Più questo rapporto sarà grande e più le tue ipotesi saranno corrette, ma più questo valore è piccolo e più probabile che la tua ipotesi sia falsa.”

Tu:”Quanto piccolo?”

Er Trivella:”Se voglio rifiutare la tua ipotesi con il 95% di confidenza questo dovrà essere più piccolo di 0.05.”

 

Tu ed Er Trivella scoprite che:

  • Il numero di volte che mischiando i foglietti hai ottenuto risultati migliori è stata solo 1 su 100 il p-value è 0.01
  • l’ipotesi che fosse tutta fortuna è falsa
  • tocca pagare da bere

Gli A/B test sono estremamente frequenti soprattutto nel Digital Marketing, ma non sempre la loro valutazione è di facile interesse, questo articolo con lo script allegato è solo una simpatica introduzioni, molte ipotesi sono state semplificate, per una rigorosa trattazione consiglio sempre il Ross.

Inoltre bisogna sempre valutare il costo della sperimentazione, il miglioramento che si ottiene dal test A o dal test B non solo deve essere statisticamente significativo, ma anche economicamente significativo.

Per Economicamente Significativo intendo che il costo della sperimentazione è giustificato dal guadagno che il miglioramento genera, un punto estremamente difficile e non sempre rispettato.

Grazie per aver letto l’articolo!

Se ti piace ri-condividilo 🙂

Un abbraccione

Andrea

 

ps Devo formattare meglio il codice è sempre un po’ un trauma per me districarmi tra il notebook jupyter e il codice html, inizierò anche a pubblicare questi script sul mio profilo GitHub 🙂

 

In [4]:
import numpy as np

import pandas as pd

 

In [5]:
#Rappresentiamo attraverso due array di 1 e 0 i nostri due scenari di analisi

old_pic=np.array([True] * 1 + [False] * 99)

new_pic=np.array([True] * 10 + [False] * 90)

 

 

In [6]:
#Definiamo la statistica oggetto di analisi come 

#la differenza i successi con le nuove foto e i successi con le vecchie

#in rapporto al numero di tentativi effettuati

def frac_abs_success(a,b):

"""Compute fraction of Democrat yay votes."""

afrac = np.sum(a) /len(a)

bfrac= np.sum(b) /len(b)

ababs=abs(afrac-bfrac)

return ababs

def permutation_sample(data1, data2,func):

"""Generiamo una permutazione definiti due data set."""

 

# Concateniamo i datasets: data

data = np.concatenate((data1,data2))

 

# Definiamo l'array delle permutazioni permuted_data

permuted_data = np.random.permutation(data)

 

#  Dividiamo in due insiemi A' B' l'array delle permtazioni: perm_sample_1, perm_sample_2

perm_sample_1 = permuted_data[:len(data1)]

perm_sample_2 = permuted_data[len(data1):]

delta_rim=func(perm_sample_1,perm_sample_2)

 

return delta_rim

 

In [7]:
#Realizziamo n permutazioni dei nostri due insiemi A* B*

n=1000

#per ogni permutazione calcoliamo il valore della statistica di analisi

#la differenza tra il secondo ed il primo insieme

def draw_rep_stat(data,data2, func, size):

"""Draw bootstrap replicates."""

 

# Initialize array of replicates: bs_replicates

stat_replicates = np.empty(size)

 

# Generate replicates

for i in range(size):

stat_replicates[i] = permutation_sample(data,data2,func)

 

return stat_replicates

 

In [16]:
test_set=draw_rep_stat(old_pic, new_pic,frac_abs_success,n)

 

print(len(test_set))

#Calcoliamo il p-value dei dati 

#n è il numero di permutazioni che realizziamo 

p = np.sum(test_set >= frac_abs_success(old_pic,new_pic)) / len(test_set)

print('p-value =', p)

 

 

 

1000

p-value = 0.01

 

Annunci

Lascia un commento

Archiviato in Ingegneria, riflessioni, Tecnologia

Come Diventare DataScientist da Autodidatta

-Dottore mio figlio vuole diventare DataScientist secondo lei è grave?

-Gravissimo signora, mi dispiace per lei, ma io l’avevo avvertita. Purtroppo la medicina non ha risposte a queste malattie. Si prepari, si prepari, suo figlio andrà all’IKEA o per risparmiare tempo comprerà delle lavagne su Amazon(https://amzn.to/2NpOImd), ne abbiamo già visti di casi del genere.

Le ha già parlato entusiasta di MonteCarlo (https://it.wikipedia.org/wiki/Metodo_Monte_Carlo)?

-Si.

-Allora è più grave di quanto pensassi.

 

Ieri o l’altro ieri mi aveva scritto Davide Sicignani , sempre un fratello del gruppo InnLab, di Terracina (quindi dietro casa), ma che ho conosciuto solo a Londra.

Da sinistra Ugo, Davide, Gabriele ed Io in un tipico pranzo della Domenica Londinese

Davide mi chiedeva un consiglio per un suo amico Biologo che vuole avvicinarsi a Python e DataScience.

In particolare mi contattava perché ho cominciato da Zero e da Autodidatta.

Non essendo la prima persona che mi ha contattato per questo motivo, anche Stefano (sempre InnLab) qualche mese fa, ho deciso di scriverci due righe.

E’ opportuno distinguere tre domini di conoscenza che rientrano a mio avviso sotto il grande cappello del DataScientist, ma lo farò in un altro post:

  • Data Engineering (Informatica)
  • Data Modeling (Probabilità e Statistica- Ricerca Operativa)
  • Business Intelligence (Capacità Analitica)

Quello che racconterò è un po’ la sintesi del mio percorso e delle risorse utilizzate.

Indubbiamente la strada migliore per essere DataScientist è la stessa che caratterizza il settore medico:

La perfetta sinergia tra Pratica, Studio e degli ottimi Mentor.

Cosa ho capito fino ad oggi:

  1. Non esistono corsi che in un mese o in una settimana ti permettono di diventare DataScientist, se dicono il contrario è una balla
  2. Non è possibile diventare DataScientist solo attraverso la pratica
  3. Non è possibile diventare DataScientist solo attraverso i libri
  4. E’ estremamente bello
  5. E’ estremamente faticoso
  6. Esistono molte persone del mestiere disposte ad aiutarti (gratis)
  7. Per iniziare a capirci qualcosa serve almeno un anno di allenamento
  8. L’anno di allenamento necessario non ti esime dal provare a trovare lavoro anche se non hai abbastanza esperienza, quello che sai fare ed hai imparato fallo valutare anche agli altri. Rischi di rimandare il tuo ingresso nel settore spaventato di non essere all’altezza

 

Ahi quanto a dir qual era è cosa dura

esta selva selvaggia e aspra e forte

che nel pensier rinova la paura!

–Dante Alighieri, Inferno, I Canto

 

Quindi quali sono le risorse da scegliere per intraprendere questo percorso?

Ecco le mie:

DataCamp.com

Ad Agosto 2017 ho iniziato a studiare su DataCamp.com ho seguito tutto il percorso per diventare DataScientist.

Consigliatissimo.

Il costo per un anno di accesso a tutti i corsi è di 130/180$ adesso non ricordo precisamente.

Ottimo investimento, corsi semplici, ma efficaci.

Questi corsi servono per una prima infarinatura sul Machine Learning e Python.

L’app mobile permette di allenarsi anche sul bus o in metro su concetti basilari.

Contro, non è assolutamente sufficiente per lavorare, sono necessarie altre risorse a supporto.

 

Python for Data Analysis: Data Wrangling with Pandas, Numpy, and IPython

Il link al libro *-> https://amzn.to/2NrqLuJ

E’ il libro scritto da Wes McKinney, l’autore della libreria Pandas, una delle più usate in Python per la manipolazione e pulizia dei dati.

Il libro me lo aveva regalato Marchetti quando ho cominciato questo percorso ed è stato una grande risorsa, perché gradualmente spiega tutto quello che è necessario sapere per la pulizia e manipolazione dei dati.

Ho impiegato un anno per studiarlo tutto e altri sei mesi servirebbero per ripassarlo ed allenarsi su tutti i concetti che vengono illustrati.

Il libro va letto, studiato, con il pc ed il notebook jupyter aperti.

In questo modo è possibile riprodurre in tempi brevi tutti i consigli ed esempi riportati nel testo.

Se non si mettono in pratica gli esempi riportati, anche modificandoli a piacere, il libro perde gran parte della sua efficacia.

 

Pratica

Questa parte è F-O-N-D-A-M-E-N-T-A-L-E

Ho avuto modo di fare pratica attraverso progetti di consulenza, progetti pro-bono, data set pubblici, durante gli step tecnici di alcuni colloqui di lavoro e lavorando su freelancer.com.

Il tempo viene dedicato in buona parte alla pulizia e manipolazione dei dati, è frustrante, ma è sempre così. 

Solo col tempo ed esperienza si diventa veloce in questa parte del lavoro.

Esistono tantissimi data set pubblici anche italiani dove acquisire dati e iniziare ad effettuare un po’ di Data  Visualization, inferenze e creare qualche modello di Machine Learning

Eccone alcuni:

 

C’è anche Kaggle

Kaggle è una piattaforma e comunity specifica per DataScientist.

Li sono presenti tantissimi dataset sui quali esercitarsi.

Avere un buon punteggio su Kaggle, partecipare alle competizioni è un’ottima strada per farsi notare da eventuali recruiter e poter dimostrare le proprie competenze

PostgreSQL

La conoscenza di SQL è la seconda skill più richiesta dopo Python negli annunci di lavoro.

Questo sulla base  delle job description analizzate (+100) per il lavoro di DataScientist a Londra

Un’ottima piattaforma gratuita per allenarsi è https://pgexercises.com/

Postgresql era uno dei DBMS più frequenti negli annunci, ne esistono anche altri, non sentitevi vincolati nella scelta.

 

Mentor

Un mentor tecnico è una risorsa chiave per vari motivi:

  • Ti sprona a fare di più
  • Può aiutarti in momenti di difficoltà a sciogliere subito eventuali nodi (ovviamente dopo che hai sbattuto la testa per almeno due giorni sul problema)
  • Rende umano un percorso fatto di numeri e righe di codice

Podcast

Esistono podcast di vario tipo sia su SoundCloud che su Spotify, ascoltarli permette nei tempi morti di essere aggiornati su tecnologie e trend del mercato.

Ingrediente Segreto

L’ingrediente segreto è uno ed uno solo: la passione

Se non vi emozionate davanti ad un bel grafico, se non vi incuriosisce la possibilità di pianificare e predire l’andamento delle vendite o valutare l’andamento delle azioni, se non impazzite all’idea di una nottata passata ad analizzare i processi esponenziali che potrebbero rappresentare la rottura di alcuni componenti elettronici, non iniziate questo percorso.

 

E’ la passione che muove tutto, le altre risorse sono secondarie.

Iniziate.

Fate.

Fate.

Fate.

Grazie per aver letto l’articolo!

Un abbraccio

Andrea

 

ps se ci sono errori di battitura o di grammatica scrivimi pure 🙂

*Con i link di affiliazione di Amazon potete aiutarmi a coprire le spese per il blog vi ringrazio in anticipo

 

3 commenti

Archiviato in Hobby, Ingegneria

PCA spiegazione per fidanzati/mariti sfortunati prt 2

Non so se la mia spiegazione sulla PCA fosse chiara,non lo so, e ci riprovo.

E’ una tecnica che viene utilizzata molto frequentemente nel campo del Machine Learning, PCA sta a significare Principal Component Analysis.

Ora Immagina.

Per qualche sfortunata ragione, tu devi regalare una borsa alla tua ragazza/moglie/amante (e io nemmeno ai nemici lo auguro).

Immagina.

Tu e la tua conoscenza sul mondo delle borse.

Immagina.

Tu e la tua conoscenza che spazia dal trolley che usi dall’ultima gita a Praga del liceo, che tua madre e la tua ragazza vorrebbero buttare ma per te è ancora funzionante nonostante quella macchina enorme dovuta agli eccessi del tuo amico tale “ER Bresaola”, e finisce allo zaino tecnico porta pc, con esclusione della 24 ore che ti ha regalato Zio Gianni “perché ormai sei grande”.

Immagina.

TU, proprio TU, devi acquistare una borsa, o in romano ‘na borZa.

Photo by Artem Bali on Unsplash

Inizi a classificare i prodotti:

  • Range di costo (5-5000 €)
  • Marca (Cinese Sotto Casa-Mercato di Merce Parallela-Amazon-Alta Moda)
  • Colore(Blu-Rosso-Nero)(In almeno 216 tonalità diverse per colore)
  • Dimensione (Clutch-Trousse-Hobo Bag-Shopping Bag) (miserabile pensavi che si usasse il metro o il cm come da Sistema Internazionale di Unità di Misura)
  • Dove comprarla (Km Da casa tua 0-100km)
  • Come pagarla (Cash-Finanziamento a 20 anni-Bitcoin-Vai a Rubare perché sei povero)
  • Periodo di Analisi Intraperiodale (Primavera-Estate-Autunno-Inverno)
  • Periodo di Analisi Interperiodale (Outlet-Ultima Uscita)

Almeno 8 variabili di scelta, dura eh?

Purtroppo non puoi sottrarti dall’acquisto perché deve farti perdonare.

Non sai il motivo, lo ignori, ma c’è, in quanto uomo sbagli a prescindere e DEVI farti perdonare.

La PCA, ti aiuta a semplificare il problema ed i dati di input per la tua fatidica scelta.

Nel problema in esame alcune variabili sono in qualche modo ridondanti e assimilabili, ad esempio:

  • Come Pagarla
  • Marca
  • Range Di Costo

potrebbero essere aggregate in un’unica nuova variabile.

E’ molto probabile che se vai dal cinese sotto casa puoi aggregare sotto un unico cappello le variabili “Cash-Cinese Sotto Casa-5€” così come se vai ad effettuare l’acquisto in-quella-maison-che-non-va-nominata “Vai a Rubare perché sei povero- maison-che-non-va-nominata-5000€” possono anche loro essere aggregate.

Questo è quello che fa la tecnica PCA.

Stiamo quindi scartando le caratteristiche ridondanti?

No, anche perchè sappiamo benissimo che alla minimo passo falso si  rischia di aprire un caso di stato, tu nella tua classificazione  hai preso in considerazione TUTTE le variabili, ma le hai trasformate attraverso questa tecnica.

Questa domanda è importante perchè nel vecchio articolo parlavo di riduzione, ma questo non significa che scartiamo determinate varibili(in termini matematici stiamo effettuando una combinazione lineare)

La PCA permette di costruire delle nuove variabili aggregate significative nel processo di classificazione basandosi su quelle precedenti.

Con l’esempio precedente siamo passati da 8 variabili a 6.

Inoltre con la nuova trasformazione abbiamo identificato una variabile che può variare sensibilmente da borsa a borsa, questo elemento è di fondamentale importanza perché abbiamo identificato un elemento che permette di differenziare ed identificare (labeling) le varie tipologie.

Dal punto di vista matematico abbiamo identificato la nuova variabile caratterizzata dalla maggior varianza.

E’ per questo che si chiama “Componente Principale”, perchè è la variabile con varianza maggiore.

Ora che sappiamo come classificare le borse quale comprare?

Questo punto esula la tecnica PCA.

Nelle teoria classica del pensiero economico questo problema per l’uomo razionale non si porrebbe.

  • Volume da trasportare
  • Identificazione del costo minimo in rapporto al volume (€/cm3)

Purtroppo, non funziona così tranne nel mondo degli ingegneri, una analisi basata sugli acquisti storici della fidanzata/moglie/amante risolverebbe il problema, ma non è semplice.

“Essere ingegnere è praticamente una malattia. A una donna, moglie d’ingegnere si potrebbe chiedere:  “Signora, suo marito come sta? E’ ancora ingerere?” E lei potrebbe risponere: “No, adesso sta un po’ meglio” -Luciano de Crescenzo – I pensieri di Bellavista

Un’analisi delle frequenze delle caratteristiche degli acquisti passati, magari modellizzata attraverso il teorema di Bayes, potrebbe portarvi ad acquistare la “borsa più frequente” che non è quella “che la farebbe più felice”.

Quello che potete però fare è assegnare dei pesi alle varie variabili e quindi fare un’analisi delle frequenze pesate.

Un metodo potrebbe essere quello di assegnare un peso maggiore alle borse utilizzate il sabato sera, rispetto a quelle utilizzate tutti i giorni.

Scegliete successivamente il modello di borsa con la frequenza pesata maggiore e, con una certa probabilità, avrete scelto l’alternativa che massimizza l’obiettivo (o in altri termini minimizza l’errore).

La descrizione della PCA di questo articolo è estremamente qualitativa e semplifica molte ipotesi alla base. Nel precedente è possibile vedere come cambia la correlazione tra le variabili ed il p-value con un piccolo script in Python.

Quello che farò nell’ultimo post dedicato a questo strumento statistico sarà realizzare una spiegazione estremamente tecnica e sintetica corredata da un’opportuno script in Python.

Grazie per aver letto l’articolo!

Un abbraccio

Andrea

ps se ci sono errori scrivimi pure 🙂

Lascia un commento

Archiviato in Ingegneria, Tecnologia

PCA Parte Prima

Tra i vari progetti di Luglio e Agosto ci potrebbe essere un progetto di ottimizzazione dei costi per una società UK (non è la stessa dei cupcakes) che potrebbe richiedere l’applicazione della PCA.
In questo articolo (e forse anche un successivo) proverò a spiegare un concetto fondamentale e particolarmente utile.

Devo premettere che la trattazione è volutamente semplificata ed esistono persone decisamente più competenti e brave di me che illustrano (in inglese) l’argomento, Youtube è pieno.
Allora perchè un articolo supernoioso?

Semplice! Per me spiegare le cose è uno dei migliori metodi per apprendere.

Questo lo insegna il sommo Feyman, mica Ciccio Paduccio, maggiori info sul metodo di apprendimento Feyman qui -> https://www.focus.it/comportamento/scuola-e-universita/le-tre-regole-di-feynman-per-preparare-un-esame-e-imparare-tutto

 

Tornando a noi.

L’analisi in componenti principali, in inglese PCA, è una trasformazione lineare.

Fare una PCA è come prendere la lista dei 50 “capisardi” della vita e ridurli a 3:
“La femmina, il danaro e la mortazza”.

La PCA permette di ridurre le variabili identificando quelle realmente importanti(termine statisticamente insignificante) e non correlate tra loro (termine statisticamente fondamentale).

In termini tecnici è una trasformata, un operatore matematico, in questo caso lineare, che trasforma una funzione in un’altra funzione.

E’ molto utilizzata nell’ambito del Machine Learning nella risoluzione dei probelmi di regressione e classificazione perchè permette di ridurre il numero di variabili in gioco (feature reduction) considerando quelle fondamentali.

Nell’esempio che vi propongo, si è applicata la PCA non tanto per ridurre il numero di variabili (che è rimasto il medesimo 2), ma per decorrelarle

E’ una versione leggermente modificata di un esercizio di DataCamp.Com di questo capitolo (https://www.datacamp.com/courses/unsupervised-learning-in-python).

Nella prima fase dell’esempio si studia la correlazione tra due variabili e nella seconda parte si applica una PCA

Sono stati presi 209 semi e si è misurata la loro lunghezza e larghezza e le informazioni sono state salvate in un file *csv

Inzialmente ho realizzato uno scatter plot per vedere quale fosse la correlazione tra le due variabili ed ho calcolato il coefficiente di pearson, successivamente ho applicato una PCA per decorrelare le due variabili e identificare le componenti principali che definiscono due nuove variabili, dove quella con la maggiore varianza raprpesenta il primo asse, mentre la seconda quella con varianza minore.

Nel caso noi avessimo avuto m variabili e dalla PCA avessimo ottenuto n variabili, con m>n, allora il secondo asse sarebbe stato descritto dalla seconda variabile con varianza maggiore, il terzo asse con la terza variabile con varianza maggiore fino alla n-essima variabile.

Nei prossimi articoli cercherò di illustrare meglio il concetto con esempi pratici, fino a quando non riuscirò a elaborare un articolo dal titolo “PCA Guida definitiva” o “PCA spiegata a mia nonna”.

In [10]:
#Analisi PCA 
# Importiamo le librerie necessarie matplot scipy.stats e pandas 
import matplotlib.pyplot as plt
from scipy.stats import pearsonr
import pandas as pd
#Carichiamo il file 
grains=pd.read_csv("seeds-width-vs-length.csv")
#Vediam sempre di che si tratta e come si caratterizzano i nostri dati
print(grains.info())
print(grains.describe())
#Estraiamo dal dataframe solo i valori per poter successivamente lavorare con specifici array
grains=grains.values
#La 0-sima colonna del dataframe rappresenta la larghezza
width = grains[:,0]

#La 1-a colonna del dataframe rappresenta la lunghezza
length = grains[:,1]

# Grafichiamo tutto con uno scatter plot larghezza-lunghezza
plt.scatter(width, length)
plt.axis('equal')
plt.show()

#Calcoliamo il coefficiente di pearson detto anche coefficente di correlazione lineare ed il p-value dei dati
correlation, pvalue = pearsonr(width,length)

# Visualizziamo in due valori appena calcolati
print("Correlazione tra le due  variabili larghezza e lunghezza", round(correlation, 4))
print("P-value dei dati",pvalue)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 209 entries, 0 to 208
Data columns (total 2 columns):
3.312    209 non-null float64
5.763    209 non-null float64
dtypes: float64(2)
memory usage: 3.3 KB
None
            3.312       5.763
count  209.000000  209.000000
mean     3.258349    5.627890
std      0.378603    0.444029
min      2.630000    4.899000
25%      2.941000    5.262000
50%      3.232000    5.520000
75%      3.562000    5.980000
max      4.033000    6.675000
Correlazione tra le due  variabili larghezza e lunghezza 0.8604
P-value dei dati 1.5696623081483666e-62

Addesso possiamo valutare quelle che sono le componenti principali della nostra distribuzione e decorrelarre le due variabili attraverso una PCA

In [4]:
#Carichiamo il modulo della libreria che ci interessa per l'operazione
#PCA Analysis 
# Import PCA
from sklearn.decomposition import PCA

#Creiamo l'istanza pca modello
modello = PCA()

# Applichiamo il metodo fit_transform method al nostro dataset sul grano
#Otterremo un nuovo array con due nuove variabili decorrelate
pca_features = modello.fit_transform(grains)

# Assegniamo la 0-sima colonna di pca_features alla variabile xs
xs = pca_features[:,0]

# Assegniamo la 1-a colonna di pca_features alla variabile ys
ys = pca_features[:,1]

# Grafichiamo tutto con uno scatter plot le due nuove variabili
plt.scatter(xs, ys)
plt.axis('equal')
plt.show()

# Calcoliamo coefficiente di pearson per le due nuove variabili xs ys
correlation, pvalue = pearsonr(xs, ys)

# Visualizziamo i due risultati approssimati
print("Correlazione tra le due nuove variabili xs ed ys", round(correlation,4))
print("P-value dei dati",pvalue)
Correlazione tra le due nuove variabili xs ed ys -0.0
"P-value dei dati 1.0

1 Commento

Archiviato in Ingegneria

Le 25 skills più richieste per un Data Scientist (tratto da una storia vera) prt 1

Non è facile essere un wannabe Data Scientist

Essere un Data Scientist è veramente difficile, essere un Data Scientist autodidatta ancora peggio.

Il tempo non è mai abbastanza, c’è bisogno di focalizzarsi e focalizzarsi verso quello che il mercato del lavoro vuole, in questo modo ci saranno più possibilità di farcela, almeno all’inizio.

Dove focalizzarsi?

Sono sempre convinto che bisogna definire una strategia di medio termine e seguirla con pazienza, altrimenti si rischierà di essere distratti da tutte le informazioni provenienti dalla rete.

Verso Settembre 2017 fino ad oggi, molto spesso dopo aver inviato il mio CV per annunci di lavoro come Data Scientist ho segnato manualmente su Google Foglio le competenze richieste per quel ruolo

Ho superato più di 430 righe ognuna contenente una informazione.

Oggi ho deciso di analizzare questo CSV in modo da capire quali fossero le competenze più richieste come Data Scientist ed esercitarmi.

In [80]:
#importing the libraries 

import pandas as pd
import matplotlib.pyplot as plt
In [40]:
csvname= "skill.csv"
df= pd.read_csv(csvname,sep= ",", header=None, index_col=False)
print(df.head(30))
                             0    1
0                       Agile   NaN
1                           AI  NaN
2                    Algorithm  NaN
3                    Algorithm  NaN
4                   Algorithms  NaN
5                    Analytics  NaN
6                      Apache   NaN
7                      Apache   NaN
8                          API  NaN
9   Artificial neural networks  NaN
10                         AWS  NaN
11                         AWS  NaN
12                         AWS  NaN
13                         AWS  NaN
14                         AWS  NaN
15                         AWS  NaN
16                         AWS  NaN
17                         AWS  NaN
18                       Azure  NaN
19                       Azure  NaN
20                       Azure  NaN
21                       Azure  NaN
22                       Azure  NaN
23              Bayesian Model  NaN
24              Bayesian Model  NaN
25              Bayesian Model  NaN
26         Bayesian Statistics  NaN
27                          BI  NaN
28                          BI  NaN
29                         BI   NaN
30                    Big Data  NaN
31                    Big Data  NaN
32                    Big Data  NaN
33                    Big Data  NaN
34                    Big Data  NaN
35                    Big Data  NaN
36                    Big Data  NaN
37                    Big Data  NaN
38                    BIgQuery  NaN
39                    BIgQuery  NaN
In [34]:
print(df.columns)
Int64Index([0, 1], dtype='int64')
In [50]:
df.columns=['skills','vuota']
In [51]:
print(df.head())
       skills vuota
0      Agile    NaN
1          AI   NaN
2   Algorithm   NaN
3   Algorithm   NaN
4  Algorithms   NaN
In [65]:
df_skill=pd.DataFrame(df.iloc[:,0], columns=['skills'])
print(df_skill.head(5))
       skills
0      Agile 
1          AI
2   Algorithm
3   Algorithm
4  Algorithms
In [71]:
print(df_skill.info())
RangeIndex: 423 entries, 0 to 422
Data columns (total 1 columns):
skills    423 non-null object
dtypes: object(1)
memory usage: 3.4+ KB
None
In [84]:
df_skill_grouped=df_skill.groupby(['skills']).size().sort_values(ascending=False)
In [85]:
print(df_skill_grouped)
skills
SQL                                        37
Python                                     36
Spark                                      16
Python                                     13
Handoop                                    12
Scala                                      10
Scikit Learn                               10
NLP                                        10
Machine Learning                           10
Statistics                                 10
AWS                                         8
Big Data                                    8
NOSQL                                       7
Kafka                                       7
TensorFlow                                  6
Tableau                                     6
Pandas                                      5
Numpy                                       5
Azure                                       5
SQL                                         5
Machine learning                            5
Financial Systems                           4
Predictive Model                            4
Neural Networks                             4
C++                                         4
Machine Learning                            4
Go                                          3
Bayesian Model                              3
MapReduce                                   3
Clustering                                  3
                                           ..
Sentiment Analysis                          1
NLP                                         1
Scraping                                    1
NOSQL                                       1
Naive Bayes classifier                      1
Natural language processing                 1
Numpy                                       1
Linear Model                                1
Latent semantic indexing                    1
Pig                                         1
Hashmaps                                    1
Flask                                       1
Flink                                       1
Gis                                         1
GitHub                                      1
Testing Software                            1
Google 360                                  1
Gradient Boosted Machine                    1
TF-IDF                                      1
Plotly                                      1
T-SQL                                       1
Html                                        1
Information Extraction                      1
Instantaneously trained neural networks     1
JQuery                                      1
JSON                                        1
Java                                        1
JavaScript                                  1
Jira                                        1
AI                                          1
Length: 150, dtype: int64
In [90]:
df_skill_grouped.head(25).plot.bar()
 25 skills
Queste analisi devono evidentemente essere migliorate:

 

1) Implementare delle Regex, in questo modo potrò correggere velocemente gli errori di battitura ed essere più preciso (ad esempio nel grafico si vede che “Python” e “Python ” (con spazio finale) sono stati trattati come elementi differenti

 

2) Web Scraping degli annunci di lavoro ai quali ho risposto per estrarre automaticamente le competenze richieste ed aggiornare automaticamente il foglio Google

 

3) Migliorare il codice del Pomodoro Workout Analyzer così da essere più consapevole dicome sto gestendo le ore di esercizio con Python.

 

Un abbraccio e grazie per aver letto il mio articolo.

 

Andrea

 

ps se noti qualche errore scrivimi pure

 

1 Commento

Archiviato in Ingegneria, riflessioni

DataCamp.com considerazioni sul “DataScientist Career Track with Python”

Ieri, 30 Dicembre, ho finito il “Career Track da Data Scientist con Python” su DataCamp.com.

E’ stata una bella avventura durata per la precisione 226 ore(monitorate con la tecnica del Pomodoro).

DataCamp

Ero troppo pigro da rimuovere la parola “Working” 

Il piano di studi  è composto da 20 corsi, ai quali ho aggiunto due su SQL e PostgreSQL .

 

Il percorso è costato 180$, in realtà con 180$ ho accesso ad un anno di corsi, quindi potrei anche seguirne altri (e dopo Febbraio farò così) e scadrà ad Agosto 2019.

E’ stato veramente interessante ed ho scoperto ua disciplina che mi appassiona tantissimo fondendo più materie.

Quello che ho apprezzato del percorso è stata la struttura per moduli, inoltre ogni 5 minuti di teoria seguivano almeno tre esercizi pratici e non era prevista una conoscenza iniziale di Python, per quanto delle basi di programmazione le avessi acquisite studiando un po’ di C con Arduino.

Lo consiglio?

Si, se la materia interessa, ma successivamente è necessario dedicarsi a dei propri progetti per implementare e consolidare quegli insegnamenti che altrimenti possono essere dimenticati in fretta.

Una nota negativa, sul sito c’è scritto che tutto il piano di studi duri 67h, non ho la più pallida idea di come abbiano fatto i conti, sarebbero 3,35 h per corso, ma, basato sulla mia esperienza personale, non credo sia una stima veritiera.

Gli sforzi ed il tempo necessario per maturare i concetti spiegati sono molto maggiori.

Adesso è tempo di mettere in pratica tutto quello che ho studiato!

Gennaio, oltre alla preparazione per l’esame di stato e la ricerca di un posto di lavoro, lo dedicherò alla realizzazione su Git Hub di un mio personale portfolio.

In realtà ho anche promesso a Diego che avrei scritto un paio di articoli sul suo blog in cui spiegavo cosa fossero in Statistica i test di verifica delle ipotesi e gli errori legati a questi test.

Anche perché come potete vedere dai due grafici, quasi tutto il tempo dedicato in questi mesi su Python è stato dedicato allo studio su DataCamp(226h su 290h totali) piuttosto che a qualche progetto da DataScientist.

 

Python31 12

Un abbraccio e buon anno

Lascia un commento

Archiviato in Ingegneria, Tecnologia

Biologia della Sopravvivenza Aziendale

La Boston Consulting Group ha realizzato un’analisi molto interessante che trovate qui nel dettaglio.

La cosa che più mi ha affascinato è che sul piano qualitativo erano considerazioni non nuove rispetto a quanto trattato durante la preparazione all’esame di Ecologia Applicata.

L’articolo, rispetto a quanto studiato, si caratterizza per una analisi dei dati molto più strutturata e questa è stata una delle ragioni che mi ha spinto a scrivere un nuovo articolo.

Il concetto principale è il seguente:

Abbandonare una modellizzazione lineare dell’azienda e delle sue dinamiche considerando questa e le sue azioni all’interno di un sistema complesso adattivo.

Iniziamo però a snocciolare, come piace a me, un po’ di dati (un po’ presi dall’articolo un po’ aggiunti)

Oggi abbiamo 2,6 miliardi di persone che usano gli smartphone, il progresso ha incrementato sensibilmente la velocità con cui un nuovo prodotto può raggiungere tali persone e conseguentemente il tasso di adozione.

 

Tutto questo in termini quantitativi cosa significa?

 

La BCG ha analizzato la vita di 30.000 aziende quotate in borsa negli Stati Uniti su un arco temporale di 50 anni.

A causa di fusioni, acquisizioni o peggio ancora bancarotta hanno una probabilità su tre di essere “delistate” nei successivi 5 anni.

L’età media delle aziende che vengono “delistate” è passata dai 50 anni abbondanti ai 31.6.

 

Secondo le analisi di Martin Reeves, senior partner alla BCG, questo fallimento è da imputarsi alla incapacità di adattamento delle aziende ai cambiamenti (concedetemi la provocazione, sarebbe anche lecito domandarsi quante di queste aziende delistate abbiano chiesto consulenze in ambito strategico a BCG, Bain o McKinsey).

 

 

Soluzione per adattarsi velocemente al cambiamento, soluzione non nuova, è quella di prendere esempio dalle dinamiche che regolano gli ecosistemi.

 

Vedere l’azienda all’interno di un sistema complesso adattivo.

Sistema, perché formato da una pluralità di attori che interagiscono.

Complesso, in quanto le azioni e reazioni non sono regolate da funzioni lineari, ma non-lineari e conseguentemente meno prevedibili.

Adattivo, perché se perturbate da un elemento esterno al sistema riescono ad adeguarsi (affermava un mio amico biotecnologo riferendosi al corpo umano che in un sistema complesso l’introduzione di un corpo esterno o porta al collasso del sistema stesso o il sistema rigetterà il corpo esterno,  ci sarebbero dei “se” e dei “ma”, non è questo il momento)

I punti chiave identificati da Martin Reeves sono 6:

  • Eterogeneità

Le diversità di una forma di vita permettono un miglior adattamento quando determinate variabili che caratterizzano l’ecosistema cambiano. Ad esempio i differenti ceppi di un Virus permettono a questo lo sviluppo di un resistenza ai farmaci. L’autore evidenzia l’importanza di favorire i piccoli fallimenti aziendali per garantire la nascita e test di nuove idee. E’ da evitarsi l’estrema verticalizzazione dell’azienda e nel concreto il caso citato è quello della Fujifilm che è riuscita a sopravvivere alla rivoluzione del settore delle macchine fotografiche digitali, al contrario della Kodak. Fujifilm investì pesantemente in ricerca e sviluppo oltre ad acquisire più di 40 aziende.

 

  • Modularità

Su questo punto l’autore non è stato chiarissimo o forse sono io lento a capire il concetto (molto più probabile). Partiamo dal grande problema: spesso le aziende organizzate in strutture  funzionali e si determinano delle dinamiche da “silos”, reparti che comunicano poco o male tra di loro. La soluzione è aumentare le connessioni, i contatti per rendere il sistema robusto. La correlazione ecologica è con incendi occasionali che aiutano a garantire una “modularità” del sistema permettendo la nascita di zone della foresta con minore combustibilità.  Il concetto della modularità mi riporta ad una organizzazione per divisione dell’azienda (con tutti i pro e contro).

Anche qui perdonatemi se posso apparire un sofista ma non si capisce se si parla di resilienza o resistenza, due qualità differenti di un ecosistema (resiliente è subendo un danno dall’esterno riesce a ritornare velocemente alla condizione imperturbata, resistente è un sistema che per la perturbazione di un agente esterno viene danneggiato lievemente, ma se la magnitudo dell’agente è elevata un sistema resistente può collassare e non ritornare alla situazione originaria)

 

  • Ridondanza

Nel risk management questo concetto è fortemente sviluppato. Considerate ad esempio la circolazione ferroviaria, nel tempo la gestione della sicurezza si è sempre più sofisticata (nel senso positivo del termine).

L’infrastruttura è suddivisa in più sezioni, il distanziamento minimo tra due treni è tale che se il mezzo di testa si dovesse fermare a causa di un guasto allora il mezzo di coda deve poter effettuare una manovra di arresto.

Il sistema è progettato in modo tale che l’arresto di emergenza non sia vincolato al conducente. Se il conducente non dovesse intraprendere la manovra, il sistema elettronico automaticamente attiverà la manovra di arresto, se per colpa di un guasto tecnico il comando elettronico non dovesse funzionare allora  si attiverà un sistema meccanico tale da permettere l’inizio della manovra di arresto.

Inizialmente pensavo che questo andasse contro i principi “lean”, ma in realtà l’autore cita come caso di studio un evento occorso in Toyota. Un incendio nel 1997 alla Aisin Seiki, dove c’era l’unica fornitura di P-valves, avrebbe potuto bloccare la produzione per settimane. Ma Toyota e Aisin furono in grado di contattare più di 200 partner e riprendere in sei giorni la produzione con ritmo regolare. Attenzione, Aisin era l’unica azienda ad avere l’esperienza e la conoscenza per la produzione delle P-Valves, ma il fitto network di Toyta ha permesso di resistere e superare l’imprevisto.

In chiave ecosistemica questo meccanismo di difesa si riscontra nel sistema immunitario. Infatti abbiamo diverse linee di difesa contro i patogeni, barriere culturali (igiene personale), barriere fisiche (la pelle), un sistema immunitario (globuli bianchi) e la possibilità di ricorrere a trattamenti medici (antipiretici-antibiotici) che permettono di contrastare eventuali agenti patogeni.

  • Consapevolezza dell’imprevisto

Caratteristica di un sistema complesso adattivo è che noi non possiamo predire con certezza uno stato futuro. Nonostante questo possono essere acquisite informazioni e dati che definiscano un potenziale cambiamento.

In ambito aziendale poche cose sono più difficili da predire più del progresso e impatto di nuove tecnologie, ma è possibile, e sicuramente utile, collezionare attivamente le attività di competitor “Inusuali” (o non diretti, il termine inglese utilizzato è “Maverick”) per evitare di essere spazzati via dal mercato. Esempi di aziende che non sono riuscite a percepire questi segnali ci sono, i produttori di macchine fotografiche analogiche o per i produttori di compact disk con l’avvento delle PenDrive. Una strada per rilevare i deboli segnali del cambiamento può essere l’analisi del flusso delle smart money, ossia gli investimenti early stage dei Venture Capital. Successivamente capire se  una startup sta crescendo ed è apprezzata, capire che conseguenze può avere per il  business (sia minacce che opportunità ovviamente).

 

  • Feedback loops e meccanismi di adattamento

I meccanismi di feedback sono elementi che permettono al sistema di rimanere sano ed autoregolarsi. In natura si ha una selezione degli elementi che meglio si adattano al sistema, una mutazione genetica solo se porta ad un beneficio per la specie si conserva nel tempo poichè la specie con quel gene mutato meglio si adatterà alle condizioni del sistema in cui è inserito.  Accettare i fallimenti di progetti pilota per valutare nuove opportunità di business piuttosto che effettuare semplici ottimizzazioni operative. Sulla questione dei feedback nell’articolo si citano i manager giapponesi che spesso si spostano dai piani alti al “gemba” il piano dove ci sono gli operai di livello più basso, “quelli che si sporcano le mani”,  per acquisire informazioni nuove. La questione dell’acquisizione delle informazioni è fondamentale, trattata anche da Andrew Groove in “High Output Management”, da Steve Jobs (la leggenda narra che chiedesse sempre a chi fosse in ascensore con lui “Qual è il contributo che stai dando ad Apple”) .

Questo punto non pone la differenza tra un feedback negativo ed uno positivo, questa omissione mi sembra indebolire la correlazione.  L’autore vuole giustificare la necessità di tutelare l’eterogeneità all’interno di un sistema organizzativo in contrasto con il pensiero manageriale dominante che vede nell’eterogeneità una inefficienza, una dispersione delle risorse.  Il caso di successo che si cita è la Tata Consultancy Services, ma al di la del risultato finanziario 20 milioni di dollari di fatturato nel 1991, 1 miliardo di dollari nel 2003 e 15 miliardi nel 2015 andrebbero anche analizzate altre variabili come lo sviluppo tecnologico indiano, il costo della manodopera in India e la sua informatizzazione, probabilmente è stato trattato e non discusso per motivi di sintesi nell’articolo.

 

  • Fiducia e cooperazione

Affinché un sistema complesso possa conservarsi dinamicamente nel tempo è necessaria una cooperazione tra gli elementi (è estremamente semplificato come concetto, ma questo vale anche per i punti precedenti, è ovvio che in un ecosistema alcune specie competano per la sopravvivenza). Nell’economia dell’ambiente  è stato studiato da Garret Hardin the tragedy of the commons :

“Secondo questa impostazione, se un bene non appartiene a nessuno ma è liberamente accessibile, vi è una tendenza a sovrasfruttarlo. L’individuo che si appropria del bene comune, deteriorandolo, infatti, gode per intero del beneficio, mentre sostiene solo una piccola parte del costo (in quanto questo costo verrà socializzato). Poiché tutti ragionano nello stesso modo, il risultato è il saccheggio del bene. Analogamente, nessuno è incentivato a darsi da fare per migliorare il bene, poiché sosterrebbe un costo a fronte di un beneficio di cui non potrebbe appropriarsi che in parte.”

Secondo invece il primo premio nobel per l’economia di sesso femminile Elinor Ostrom, è possibile superare questo problema attraverso la cooperazione, che si traduce in fiducia tra gli utilizzatori, una conoscenza del rischio in caso di sovra sfruttamento, questa consapevolezza può portare a non massimizzare i profitti individuali, in favore dell’ottimo della collettività. Questo approccio è stato adottato dalla Novo Nordisk per entrare nel mercato farmaceutico Cinese nei primi anni ’90. Negli anni 90 in Cina non erano ancora diffuse in ambito medico delle procedure per l’analisi del diabete. Novo Nordisk ha iniziato a collaborare con il Ministero della Salute Cinese e la “World Diabetes Foundation”  per insegnare ad oltre 200.000 medici procedure per la diagnosi del diabete. Novo Nordisk non si è posizionata solo come un distributore di insulina, ma ha realizzato dei centri di ricerca e sviluppo in Cina oltre che di produzione.

Questi sforzi sono stati bene ricompensati.

Oggi la Novo Nordisk detiene il 60% del mercato dell’insulina in Cina.

 

 

In realtà gli ecosistemi sono sistemi complessi, molto delicati che impiegano migliaia di anni per svilupparsi e spesso basta un elemento esterno come l’uomo per portarli al collasso in poco tempo.

La correlazione, che ho trovato in alcuni punti forzata, è strutturata ed interessante.

Mi incuriosisce particolarmente conoscere l’evoluzione del pensiero delle società di consulenza strategica nei prossimi anni.

Chissà.

 

Lascia un commento

Archiviato in Ingegneria, Notizie e politica, Racconti universitari, Scritti sparsi