Skip to content

📚🚀 Empowering UPC's academic planning with ML! Predict enrollments precisely, optimize resources, and enhance efficiency. Check out this project!

License

Notifications You must be signed in to change notification settings

Anass-23/Predictor-de-matricula

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Predicció de Matrícula Basada en Aprenentatge Automàtic

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.

Tractament de dades

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:

Tractament de dades
    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)

Entrenament i anàlisi de models

É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.

Mòdul d'entrenament

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']
    )

Futur treball

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:

Mòdul d'entrenament

About

📚🚀 Empowering UPC's academic planning with ML! Predict enrollments precisely, optimize resources, and enhance efficiency. Check out this project!

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published