def create_cut_percentile(df, columns: list, percentile=0.99, return_new_cols=True, verbose=True):
    """
    Add new columns with original continous data clipped at specified percentile.
    Good for removing outlier for linear models.
    """

    new_cols = []
    
    for col in columns:
        if col.startswith('ft_'): new_column_name = f'{col}__pctl{percentile}'
        else:                     new_column_name = f'ft_{col}__pctl{percentile}'

        percentile_value = df[col].quantile(percentile)
        df[new_column_name] = df[col].clip(None, percentile_value)

        new_cols.append(new_column_name)
        if verbose:
            print('added', new_column_name, 'with upper clip at', percentile)

    if return_new_cols: return df, new_cols
    else:               return df