CODING IN ACTION LAB (MODULE II)

CODING IN ACTION LAB (MODULE II)

Stefano Guarino

Obiettivi formativi

Questo corso si basa sul lavoro svolto durante il primo modulo del Coding in Action Lab. Nella prima fase, il corso introduce i concetti di costo computazionale e di efficienza di un programma, illustra alcune buone prassi per scrivere codice leggibile, organizzato ed efficiente, e presenta i principali strumenti per l'elaborazione, l'analisi e la visualizzazione dei dati disponibili in Python, uno dei linguaggi di programmazione di riferimento nel mondo della "data science". Nella seconda fase, il corso si concentra sulle principali tecniche di elaborazione e analisi dati: acquisizione, pulizia e preprocessamento dei dati; analisi statistica e visualizzazione dati; clustering e classificazione; apprendimento supervisionato e non. A tal fine, gli studenti affronteranno problemi concreti utilizzando dati reali: segmentazione della clientela, definizione di un sistemi di raccomandazione, e progettazione di un sistema predittivo della qualità di un prodotto.

Risultati di apprendimento attesi

Conoscenza e comprensione: Entro la fine di questo corso, gli studenti capiranno che un buon programma risolve il compito dato utilizzando la minor quantità possibile di risorse. Impareranno la sintassi specifica di Python e le migliori pratiche necessarie per rendere la programmazione più veloce e aumentare le prestazioni. Inoltre, gli studenti impareranno come utilizzare, a livello introduttivo, i più noti pacchetti Python per l'analisi e la visualizzazione dei dati: NumPy, Pandas, Scikit-learn e Matplotlib. Al termine del corso, gli studenti conosceranno i concetti principali dell'analisi dei dati e comprenderanno l'importanza di utilizzare algoritmi adeguati per estrarre tendenze e modelli dai dati, combinando tecniche di data mining, modellazione predittiva e apprendimento automatico. Il corso insegnerà agli studenti a utilizzare un approccio alla risoluzione dei problemi e al processo decisionale basato sui dati, promuovendo il loro pensiero critico e la loro capacità di lavorare da soli o in gruppo. Applicazione delle conoscenze e della comprensione: Per verificare la comprensione dei concetti visti in classe, agli studenti verranno assegnati progetti che richiedono di trattare dati reali. Verrà chiesto loro di: - manipolare ed elaborare rapidamente grandi insiemi di dati attraverso dataframe e array - Visualizzare dati e funzioni - Operare analisi descrittive e modellizzazioni di base (statistiche, istogrammi, interpolazione, clustering, fitting). Il corso preparerà gli studenti a corsi più avanzati di analisi dei dati e li renderà pronti a completare progetti in altri corsi che richiedono un approccio computazionale ai dati. Formulare giudizi: Al termine del programma di studio, gli studenti saranno in grado di: - confrontare semplici algoritmi che risolvono lo stesso compito in termini di costo computazionale - Affrontare un semplice progetto di analisi dei dati Abilità comunicative: Una volta a conoscenza dei concetti di efficienza computazionale e di memoria e alla loro formalizzazione, gli studenti capiranno che il "costo" della soluzione di un problema può essere quantificato ed espresso con precisione. Attraverso esempi, casi di studio e progetti, gli studenti impareranno a comunicare i risultati di un'attività di analisi dei dati e a giustificare la scelta di specifici algoritmi, metodi e tecniche. Capacità di apprendimento: Gli studenti saranno introdotti a una serie di librerie avanzate/professionali per l'analisi dei dati. Alla fine del corso, saranno in grado di navigare autonomamente nella libreria standard di Python e nel web per trovare le librerie e gli strumenti giusti per svolgere un determinato compito.

Contenuti Del Corso

Il corso tratterà i seguenti aspetti della programmazione informatica: • Principi di complessità computazione, efficienza di un algoritmo • Pythonic programming: espressioni condizionali; EAFP (Easier to Ask for Forgiveness than Permission); list comprehension; operatori any e all; insiemi. • Pacchetti per la programmazione scientifica: Numpy, Panda, Scipy, Scikit Learn, Matplotlib • Ingestione, pulizia e preelaborazione dei dati. Visualizzazione di distribuzioni statistiche. Analisi di correlazione, modelli di regressione e previsione. Segmentazione dei clienti e modello RFM. Sistemi di raccomandazione. Apprendimento e classificazione supervisionati e non.

Testi Di Riferimento

Allen B. Downey, “Think Python: How to Think Like a Computer Scientist (2nd Edition)”, O’Reilly, ISBN-13: 978-1491939369 Hastie, T., Tibshirani, R., Friedman, J. H., & Friedman, J. H. (2009). The elements of statistical learning: data mining, inference, and prediction (Vol. 2, pp. 1-758). New York: springer. VanderPlas, J. (2016). Python data science handbook: Essential tools for working with data. " O'Reilly Media, Inc.". Shmueli, G., Bruce, P. C., Gedeck, P., & Patel, N. R. (2019). Data mining for business analytics: concepts, techniques and applications in Python. John Wiley & Sons.

Metodologie Didattiche

L'insegnamento frontale sarà utilizzato per presentare agli studenti i nuovi argomenti. Per ogni argomento, verranno quindi considerati alcuni esempi e casi di studio che gli studenti dovranno affrontare in autonomia, da soli o in gruppo, in linea con il paradigma del “learning by doing”. La partecipazione degli studenti alle lezioni è fortemente incoraggiata.

Modalità di verifica dell'apprendimento

La valutazione di questo corso si baserà su una combinazione di progetti di programmazione da svolgere durante le settimane di corso e da discutere con il docente (70%) e di un esame finale (30%). L'esame finale sarà composto da un quiz a risposta multipla. Tutti gli elaborati relativi a problemi di programmazione saranno valutati come segue: • Se il codice fornisce la risposta corretta utilizzando l'approccio richiesto: 100% • Se generalmente utilizza l'approccio corretto, ma la risposta è errata a causa di alcuni piccoli errori: 70-90% • Se utilizza correttamente i concetti fondamentali e fa qualche progresso nel tentativo di risolvere il problema: 40-60% • Se la risposta dimostra una mancanza di comprensione di alcuni o tutti i concetti fondamentali: 0-40% Per gli studenti non frequentanti, i progetti peseranno il 50% del voto e sarà previsto anche un esame orale per il rimanente 20%.

Criteri per l’assegnazione dell’elaborato finale

Non è prevista l'assegnazione di tesi

Settimana 1

4 ore di lezione frontale + 1-2 giorni di lavoro autonomo in gruppo: - principi di complessità computazionale; efficacia vs. efficienza di un programma; esempi di algoritmi che risolvono lo stesso problema ma aventi diversa complessità - espressioni condizionali; EAFP (Easier to Ask for Forgiveness than Permission) e try-except statements; list comprehension; operatori any e all; insiemi - introduzione alle librerie Numpy, Pandas, SciPy, Scikit Learn e Matplotlib - come importare un dataset; cercare ed eliminare dati mancanti, duplicati, dati superflui; verifica della coerenza interna di un dataset 4 ore di lezione frontale + 1-2 giorni di lavoro autonomo in gruppo: - raggruppare e ordinare i dati per valore di alcune features - distribuzioni statistiche, media, mediana, quartili, skewness, rescaling, standardizazzione, outliers - calcolo e visualizzazione di istogrammi e distribuzione delle features, possibilmente raggruppate in base ad altri attributi (e.g., temporali) - correlazione tra attributi: misure di correlazione e correlation matrix; scatterplot e fit lineare - embedding di un dataset non numerico in uno spazio vettoriale; distanza spaziale come misura di similarità, cosine similarity

Settimana 2

4 ore di lezione frontale + 1-2 giorni di lavoro autonomo in gruppo: - clustering spaziale, k-means, elbow method, silhouette method - problema della dimensionalità e della sparsità dei dati; dimensionality reduction e decomposizione ai valori singolari - segmentazione di clienti in base al modello RFM (Recency - Frequency - Monetary value): RFM tramite clustering spaziale e relativo labeling dei segmenti; - definizione di un sistema di raccomandazione: raccomandazione basata sulla popolarità; user-based system; item-bases system 4 ore di lezione frontale + 1-2 giorni di lavoro autonomo in gruppo: - introduzione al machine learning: apprendimento supervisionato e non supervisionato; regressione vs. classificazione - regressione: funzione di costo; alberi di decisione, ensembles, bootstrapping e random forests; cross-validation, overfitting e underfitting - classificazione: classificazione binaria e multi-label; misurare la qualità di una classificazione, precision, recall, f1-score, confusion matrix, curva ROC e AUC; classificazione tramite decision tree e random forest - applicazione alla predizione della qualità/customer satisfaction di un vino 

Settimana 3

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.

Settimana 4

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.

Settimana 5

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.

Settimana 6

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.

Settimana 7

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.

Settimana 8

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.

Settimana 9

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.

Settimana 10

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.

Settimana 11

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.

Settimana 12

Come previsto dal programma del corso di studi, questo è un corso intensivo di 2 settimane tenuto nel gap tra la sessione estiva d'esame e la pausa estiva.