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 tenimall_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]
}
)