En aquest repositori s'ha publicat tot el codi font utilitzat en el meu treball de fi de grau (TFG) a l'Universitat Polit猫cnica de Barcelona. S'ha establert un acord confidencial amb l'universitat, el que ha implicat l'eliminaci贸 de totes les dades, incl煤s les que s'havien anonimitzat, sense l'opci贸 de publicar-les.
Respecte al tractament i preprocessament de les dades, s'ha desenvolupat el
m貌dul data
amb la finalitat de depurar les dades crues i aplicar les
transformacions definides en el treball:
if __name__ == '__main__':
# Taula acr貌nims
(tm, ta) = CarregaTaules(
nom_mat=RAW_MAT_FILE_PATH,
nom_acr=RAW_ACRO_FILE_PATH,
reporta=False
)
# C脿rrega de les dades crues per a la 1a transformaci贸
pt = PrimeraTransformacio(file=INTERIM_PATH / 'dataset_base.csv') pt.add_ta(ta)
# Transformaci贸
ds = pt.transform()
# Emmagatzemament
ds.to_csv(PROCESSED_PATH / 'primerDataset.csv', index=False)
脡s important destacar que tota l'arquitectura de software ha estat dissenyada amb un enfocament cap a la fase d'an脿lisi i investigaci贸, amb l'objectiu de permetre la realitzaci贸 de diverses proves i experiments de manera agn貌stica al model. Aix貌 significa que qualsevol model pot ser entrenat i avaluat utilitzant aquesta arquitectura.
A continuaci贸 es mostra un exemple d'experimentaci贸:
#
# Definici贸 dels experiments
#
experiments = [
Experiment(
id=r'\textsc{Dt4t1m}',
transf='pt', #聽Primera transformaci贸
manager=AssigManager(),
clf=DecisionTreeClassifier(
max_depth=4,
random_state=RANDOM_STATE
)
),
Experiment(
id=r'\textsc{Dt4t2m}',
transf='st', # Segona transformaci贸
manager=AssigManager(),
clf=DecisionTreeClassifier(
max_depth=4,
random_state=RANDOM_STATE
)
)
]
#
# C脿rrega dels models
#
acrlst = assig_parser.acrlst if assig_parser.acrlst else [acr for acr in ta.get_acrlst() if acr]
for acr in acrlst:
for exp in experiments:
if exp.transf == 'pt':
y_train, y_test = y_train_pt[acr], y_test_pt[acr]
numerical_features = numerical_features_pt
elif exp.transf == 'st':
y_train, y_test = y_train_st[acr], y_test_st[acr]
numerical_features = numerical_features_st
else:
raise ValueError(f'[ERROR] Transf ({exp.transf}) no definida')
exp.manager.add_model(
acr=acr,
model=AssigPipeline(
id=acr,
y_train=y_train,
y_test=y_test,
categorical_features=categorical_features,
numerical_features=numerical_features,
clf=clone(exp.clf)
)
)
#
# Entrenament
#
for exp in experiments[:]:
if exp.transf == 'pt':
X_train=X_train_pt
elif exp.transf == 'st':
X_train=X_train_st
else:
raise ValueError(f'[ERROR] Transf ({exp.transf}) no definida')
exp.manager.fit(acrlst=acrlst, X_train=X_train)
print(exp.manager.fit_time) #聽Temps d'entrenament de cada model
#
# Visualitzaci贸
#
SHOW = {
'metrics': True,
'trees': False
}
metrics_plotter = MetricsPlotter()
metrics_plotter.plot_all(
X_test=X_test_pt if experiments[1].transf == 'pt' else X_test_st,
assig_manager=experiments[1].manager,
id=experiments[1].id,
show=SHOW['metrics']
)
metrics_plotter.plot_bars(
X_test=X_test_pt if experiments[0].transf == 'pt' else X_test_st,
assig_manager=experiments[0].manager,
id=experiments[0].id,
show=SHOW['metrics']
)
metrics_plotter.plot_metrics(
X_test=X_test_pt if experiments[0].transf == 'pt' else X_test_st,
assig_manager=experiments[0].manager,
id=experiments[0].id,
show=SHOW['metrics']
)
metrics_plotter.compare_experiments(
X_test_pt=X_test_pt,
X_test_st=X_test_st,
experiments=experiments[:],
show=SHOW['metrics']
)
En futures investigacions per a millorar els models de predicci贸 de matr铆cula, seria interessant desenvolupar una aplicaci贸 que pugui ser utilitzada de manera professional. A continuaci贸 es mostra un petit exemple d'una aplicaci贸 que s'ha provat en aquest treball: