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