20171016 - TNUI-UB/grupA-sessions GitHub Wiki

Sessió del 16 d'octubre 2017

Pràctica 1: Apriori

  • Burocràcia:

    • Es pot lliurar com a màxim el diumenge 22 a les 23.55 h. Les coses afegides després ja no es tindran en compte.
    • Centreu-vos inicialment en que funcioni. Després ja optimitzareu.

Atenció!

def filter_by_support(df, all_sets, min_support):
    """
    Donades totes les combinacions i el suport mínim, retorna un altre
    DataFrame amb solament aquelles combinacions que tenen un suport
    major al mínim

Dues notes:

  • df no és necessari a dins, doncs ja tenim all_sets. Deixeu-lo, però!
  • vam dir tenen un suport major al mínim. Als tests ho hem configurat dient major o igual. Reviseu-ho. Si hi ha algun problema no ho tindrem en compte, doncs és fall nostre.

  • Recordem: Naive és "força bruta", mentre Apriori és "utilitzo la iteració anterior". Tenim-ho en compte!

  • Recordem: combinacions != permutacions

    • combinacions de A, B i C: AB, AC, BC
    • permutacions de A, B i C: AB, AC, BA, BC, CA, CB

Temps aproximat d'execució amb el subconjunt dels que tenen mé de 50 compres (referència):

df = df_original[df_original['order_id'].isin(orders_size[orders_size > 50].index)]
get_all_n_sets(df, 2) ~ 400ms
get_all_n_sets(df, 3) ~ 6.2s

naive(df, 2, 10) ~ 1s
naive(df, 3, 10) ~ 20s

apriori(df, 2, 10) ~ 290ms
apriori(df, 3, 10) ~ 360ms

Data Frame que surt en l'enunciat:

df_enunciat = pd.DataFrame(
   {
    'order_id' : [1,1,1,2,2,3,3,4,4,4,5,5,6,6,7,7,8,8,8,8,9,9,9], 
    'product_id':[1, 2, 5,2,4,2,3,1,2,4,1,3,2,3,1,3,1,2,3,5,1,2,3]
   }
)