TdP-prove-finali/Introduzione

Proposta di tesi s281827 Caragnano Erika F.

Closed this issue · 3 comments

Studente proponente

s281287 Caragnano Erika Francesca

Titolo della proposta

Udemy Remote Learning: software per la selezione di piani formativi personalizzati.

Descrizione del problema proposto

La remotizzazione della formazione è uno strumento di democrazia: maggiore flessibilità, maggiore accessibilità, maggiore autonomia di personalizzazione e minori costi possono rendere l'istruzione un bene di dominio pubblico per tutte le età e le classi sociali.

L’applicazione JavaFX che si intende sviluppare analizza il database di una piattaforma di corsi interamente fruibili in remoto (in questo caso, Udemy) e permette all’utente di consultarne il catalogo filtrando opportunamente le istanze (esempio: per Materia, Argomento, Popolarità, Difficoltà, Prezzo, Rating etc...) per aggiungere manualmente i corsi che preferisce al proprio piano di studi.
Per monitorare le caratteristiche del piano di studi scelto, il programma fornirà alcune statistiche relative alla composizione del piano (esempio: spesa totale, multidisciplinarietà, durata totale, etc...).
Il cuore dell'applicazione, consisterà in un tool per la generazione automatica di un piano formativo personalizzato che tenga conto della disponibilità di tempo e denaro dichiarata dall’utente, nonché dei suoi obbiettivi formativi.

Descrizione della rilevanza gestionale del problema

La formazione è una forma di investimento spesso soggetta a forti limitazioni di tempo, spazio e denaro. In regime di scarsezza di queste risorse, il Remote Learning può rendere il sapere maggiormente fruibile.

Questo tool si propone di aiutare studenti, lavoratori e amatori da tutto il mondo nella selezione automatica del piano formativo più adatto alle proprie esigenze, lasciando che questi scelgano un argomento e ottengano la migliore selezione di corsi disponibile a catalogo che tenga conto dei corsi già seguiti e del loro livello di preparazione iniziale.

La logica di generazione del piano formativo in videostreaming segue un principio di gradualità dell’apprendimento verso stadi di conoscenza via via incrementali.

Descrizione dei data-set per la valutazione

Il software interagirà con un data-set proveniente dalla piattaforma di condivisione di dati Kaggle all’indirizzo https://www.kaggle.com/datasets/thedevastator/udemy-courses-revenue-generation-and-course-anal

I corsi, originariamente suddivisi su quattro tabelle afferenti ad una materia diversa, sono stati assemblati in una sola tabella che dispone di 3521 istanze.

I campi del dataset sono i seguenti:

campo descrizione variabile
course_id ID univoco del corso INT
course_title Titolo del corso VARCHAR
url URL del corso sul sito Udemy VARCHAR
price Prezzo per l'acquisto del singolo corso DOUBLE (dollari)
num_subscribers Numero di utenti già iscritti al corso INT
num_reviews Numero di recensioni del corso INT
num_lectures Numero di lezioni di cui il corso è composto INT
level Livello di preparazione richiesto VARCHAR (All levels, Beginner level, Intermediate level, Expert level)
rating Indice di gradimento degli iscritti al corso DOUBLE (percentuale 0-100%)
content_duration Durata dell'intero corso DOUBLE (ore)
timestamp Data di pubblicazione del corso DATE (YYYY-MM-DD)
subject Materia di riferimento del corso VARCHAR (Web Development, Graphic Design, Musical Instruments, Business Finance)

Il dataset, originariamente in formato CSV, non ha necessitato di particolari modifiche per l'importazione in HeidiSQL ed è ben strutturato dal momento che non presenta campi vuoti, inconsistenze o problemi di comprensibilità. La licenza per l'utilizzo dei dati non è specificata alla sorgente, quindi deduco che l'utilizzo sia libero.

Descrizione preliminare degli algoritmi coinvolti

L’applicazione viene realizzata in linguaggio Java e segue i pattern MVC (Model View Controller) e DAO (Data Access Object) per gestire la separazione tra interfaccia utente, logica applicativa e accesso ai dati. L'interfaccia utente disporrà di due sezioni:

Sezione di selezione manuale dei singoli corsi:
Questa sezione prevede semplici operazioni di lettura e aggiornamento di mappe e liste (l'aggiunta di un corso al piano formativo implica la rimozione del corso dalla lista dei futuri corsi acquistabili, ad esempio) e scrittura di query di complessità variabile a seconda dei criteri di filtraggio dei corsi selezionati dall'utente. Per la stampa delle statistiche descrittive dei corsi che popolano il piano, lascerò interagire il software con alcuni grafici a disposizione su Scene Builder.

Sezione di generazione del piano formativo:
Alla pressione del bottone "Genera", il software applicherà al dataset i filtri selezionati dall'utente e genererà un grafo semplice, orientato e non pesato, i cui nodi saranno i corsi a catalogo e gli archi connetteranno ciascun corso a tutti i corsi di difficoltà pari o immediatamente superiore. In questo modo:
corsi Beginner Level ----> corsi Beginner Level, corsi Intermediate Level e corsi All Levels
corsi Intermediate Level ---> corsi Intermediate Level, corsi Expert Level e corsi All Levels
corsi Expert Level ---> corsi Expert level e corsi All levels
corsi All Levels ---> tutti i corsi

Per mezzo di un algoritmo ricorsivo, il software implementerà il tipico "Knapsack Problem" per l'individuazione del piano formativo che risolve uno o più criteri di ottimizzazione a scelta dell'utente, si compone di corsi di difficoltà gradualmente crescente (più precisamente, non decrescente) e infine rispetta i vincoli di tempo e denaro dichiarati dall'utente.

N.B. : nell'algoritmo ricorsivo, per evitare di perdere il trend di incremento della difficoltà, sarà effettuato un controllo sul livello del corso adiacente ogni volta che sarà aggiunto un corso di tipo All Levels, affinché il livello del corso adiacente non sia inferiore al massimo livello di difficoltà dei corsi aggiunti al piano.

Descrizione preliminare delle funzionalità previste per l’applicazione software

Sezione di selezione manuale dei singoli corsi:
In questa sezione dell'interfaccia, l'utente potrà scegliere i filtri e popolare manualmente il proprio piano e per mezzo di un grafico a torta (o altro, da definire) visualizzare la multidisciplinarietà dei corsi scelti, oppure la variabilità nella difficoltà dei corsi, oppure ancora le fasce di prezzo.
/* le statistiche descrittive che intendo visualizzare verranno definite in seguito, perché dipendono più dalle scelte grafiche/organizzative dell'interfaccia, hanno per lo più una complessità prossima a zero */

Sezione di generazione del piano formativo:
Per l'implementazione dell'algoritmo ricorsivo, all'utente verrà chiesto di indicare:

  1. La/le materia/e che vuole studiare; (opzionale)
  2. Una parola chiave per filtrare la ricerca per argomento (con la funzione contains() di Java o con LIKE "%string%" di SQL sul titolo del corso). Questa scelta deriva dall'assunzione che uno stessa chiave di ricerca (es: "Pattern") può tirar fuori argomenti di materie diverse, incrementando la multidisciplinarietà (Pattern musicali, finanziari, di programmazione, di design). (opzionale)
  3. Le dimensioni complessive (in dollari) del portafoglio che intende mettere a disposizione per il proprio piano formativo. (obbligatorio)
  4. Il tempo totale (in ore) che intende dedicare all'apprendimento (obbligatorio).
  5. Criterio di ottimizzazione tra:
    • massimizzare il numero di corsi
    • massimizzare il rating medio dei corsi
    • massimizzare la popolarità dei corsi
    • massimizzare il numero di lezioni totali

La proposta è valida sia dal punto di vista gestionale, sia da quello algoritmico, puoi iniziare a lavorarci.

Un forte dubbio però riguarda la coerenza del percorso formativo che viene generato. Temo che il campo "subject" sia eccessivamente ampio e generale, mentre il course_title sia troppo specifico.
Ad esempio, se voglio imparare a sviluppare applicazioni mobili, non potrò certo cercare il tutto il campo della software engineering..., ma anche non potrò usare "mobile programming" perché magari mi serve prima un corso di informatica di base o di programmazione Java (e nel titolo non compare "mobile"). Spero di essermi spiegato.
Non mi è quindi chiaro come garantire che l'insieme di corsi selezionati sia un "percorso formativo" sensato dal punto di vista contenutistico.

Comprendo il suo dubbio e le confermo che il dataset a disposizione non offre un livello di dettaglio più raffinato per quel che concerne gli argomenti dei corsi, pertanto, la "coerenza" del piano può essere garantita solo sul piano del livello di difficoltà del corso. Quello che lei rileva è, legittimamente, l'assenza di vincoli sui "prerequisiti" dei singoli corsi. Risolvere questo problema dovrebbe tradursi nell'individuazione di un modo utile a creare un ordinamento "quantitativo" della compatibilità di argomento dei corsi, che è un dato assolutamente "qualitativo".

Non disponendo di dati in merito, l'unica soluzione che mi viene in mente (che non preveda la creazione di una intelligenza artificiale, :D ) è quella di modificare, ahimé manualmente, il dataset aggiungendo un nuovo campo "key_words" del tipo:

"Mobile App Design in Photoshop from Scratch - UI & UX DESIGN" programming:mobile:app:design:photoshop:ui/ux:development:fromscratch

"PHP - Send and Receive Mobile Text Messages (SMS)"
programming:php:mobile:text:sms:message:website:development

"Learn UI/UX and Mobile App Design in Photoshop from Scratch"
programming:mobile:app:design:photoshop:ui/ux:development:fromscratch

che in qualche modo aggiunga un maggiore livello di dettaglio sugli argomenti del corso e magari pesare gli archi con un numero risultante dalla differenza o intersezione insiemistica tra le parole chiave dei due corsi, e far sì che questo numero rappresenti il grado di "coerenza" tra i corsi. Non è una soluzione che comunque garantisce propedeuticità, che è invece il cuore del suo dubbio.

Il piano che risulta dal dataset così com'è necessita chiaramente di una semplificazione sul piano della coerenza contenutistica, quindi se lei ha suggerimenti che possano aiutarmi a produrre una ricerca più raffinata da questo punto di vista sarei felicissima di implementarli algoritmicamente. Se invece ritiene che questa limitazione comprometta irreparabilmente l'utilità del tool e ne risulti un lavoro insoddisfacente, preferisco a malincuore cambiare argomento che cimentarmi in un lavoro che mi penalizzerà.

La ringrazio.

L'opzione di aggiungere delle keyword potrebbe essere un'opzione, ma mi sembra un lavoro eccessivo, viste le 3521 righe della tabella... non vorrei che spendessi troppo tempo ad inventarti queste keyword, visto che il lavoro complessivo comunque rimane di 3 crediti.

Visto il problema con il data-set, ti direi di procedere con l'idea che avevi avuto inizialmente, quindi il set di corsi viene definito da una ricerca nel testo del titolo (peccato che non vi sia anche la descrizione, che sul sito udemy invece è presente e permetterebbe di filtrare "meglio").

La mia preoccupazione non era tanto sulla propedeuticità (possiamo pensare che questa sia soddisfatta dall'ordinamento non-decrescente che hai definito), quando sulla coesione (evitare contenuti che parlano di cose completamente slegate sono perché nel titolo c'è un termine ambiguo).

In definitiva, procedi pure con la tua proposta, siamo obbligati a tenere conto delle limitazioni del data-set.
Non ci vedo nessuna penalizzazione, in questa scelta, dal punto di vista della valutazione.