# load data
path_to_data = "data/"
training, training_info, test, test_info = load_data(path_to_data)

# create model
nb_recipients_to_predict = 10
model = FrequencyModel(nb_recipients_to_predict=nb_recipients_to_predict)

# validation
n_split = 5
cross_validation = KFoldCrossValidation(n_split)

scores = []
for fold_nb, (training_fold, training_info_fold, test_fold, test_info_fold,
              y_test_fold) in enumerate(
                  cross_validation.split(training, training_info)):
    print("\nFold #%d..." % fold_nb)

    # fit model
    model.fit(training_fold, training_info_fold)

    # predict
    predictions_per_sender = model.predict(test_fold, test_info_fold)

    # compute MAP@n
    score = MAPn(predictions_per_sender, y_test_fold, nb_recipients_to_predict)
    scores.append(score)
    print("\nMAP@n for this fold -> %0.5f" % score)

# average scores over folds
final_score = np.mean(scores)