CODING IN ACTION LAB (MODULE II)
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.