diff --git a/examples/basic/mining_nar.py b/examples/basic/mining_nar.py new file mode 100644 index 0000000000..29b19235a0 --- /dev/null +++ b/examples/basic/mining_nar.py @@ -0,0 +1,130 @@ +import desbordante +import pandas +from tabulate import tabulate + +TABLE = 'examples/datasets/dog_breeds.csv' +CLR = { + 'bold_default': '\033[1m', + 'bold_red': '\u001b[1;31m', + 'bold_green': '\033[1;32m', + 'bold_yellow': '\033[1;33m', + 'bold_blue': '\033[1;34m', + 'gray': '\033[90m', + 'default': '\033[0m', + 'blue_bg': '\033[1;46m', + 'default_bg': '\033[49m', + 'red_bg': '\033[41m' +} + +def print_table(table, title=None): + if title is not None: + print(title) + + print(tabulate(table, tablefmt='pipe', stralign='center')) + + +def print_map(map, table): + column_names = list(table.columns) + for key, value in map.items(): + print(column_names[key], end='') + print(value) + + +def print_10_discovered_nars(algo, table): + counter = 1 + for nar in algo.get_nars()[:10]: + print("NAR " + str(counter) + f":{CLR['bold_default']}") + counter += 1 + print_map(nar.ante, pdtable) + print(" |\n |\n V") + print_map(nar.cons, pdtable) + print(" support = ", nar.support) + print(" confidence = ", nar.confidence) + print(f"{CLR['default']}") + + +if __name__ == '__main__': + algo = desbordante.nar.algorithms.des() + algo.load_data(table=(TABLE, ',', True)) + print("Numerical Association Rules (NAR) are an extension of traditional " + "Association Rules (AR), which search for patterns in data. Unlike ARs, " + "which work with binary attributes (e.g., whether an item was purchased " + "or not), NARs can handle numerical data (e.g., how many units of an item " + "were purchased). This makes NARs more flexible for discovering relationships " + "in datasets with numerical data.") + print("Suppose we have a table containing students' exam grades and how many " + "hours they studied for the exam. Such a table might hold the following " + "numerical association rule:\n") + print(f"{CLR['bold_default']}Study_Hours[15.5 - 30.2] {CLR['gray']}⎤-Antecedent") + print(f"{CLR['default']}{CLR['bold_default']}Subject[Topology] {CLR['gray']}⎦") + print(f"{CLR['default']}{CLR['bold_default']} |\n |\n V") + print(f"Grade[3 - 5]] {CLR['gray']}]-Consequent") + print(f"{CLR['default']}{CLR['bold_default']} support = ", 0.21) + print(" confidence = ", 0.93) + print() + print(f"{CLR['default']}This rule states that students who study Topology for " + "between 15.5 and 30.2 hours will receive a grade between 3 and 5. This " + "rule has a support measure of 0.21, which means that 21% of rows in the dataset " + "satisfy both the antecedent's and consequent's requirements. This rule also " + "has a confidence measure of 0.93, meaning that 93% of rows that satisfy the " + "antecedent also satisfy the consequent. Note that attributes can be integers, " + "floating points, or strings.\n") + print("Desbordante implements an algorithm called \"Differential Evolution Solver\" " + "(DES), described by Iztok Fister et al. in \"uARMSolver: A framework for " + "Association Rule Mining\". It is a nature-inspired stochastic optimization " + "algorithm.\n") + print("As a demonstration of working with some of DES' parameters, let's inspect " + "a dataset containing information about 159 dog breeds.\n") + pdtable = pandas.read_csv(TABLE) + + print("Fragment of the dog_breeds.csv table:") + print(pdtable) + print("\nA fragment of the table is presented above. In total, each dog breed has" + " 13 attributes.") + print("Now, let's mine some NARs. We will use a minimum support of 0.1 and a minimum " + "confidence of 0.7. Note that the minimum support and confidence only affect " + "which of the discovered NARs are returned, but the mining process itself " + "remains unchanged. We will also use a population size of 500 and " + "max_fitness_evaluations of 700. Larger values for max_fitness_evaluations " + "tend to return broader rules encompassing more attributes. The population size " + "parameter affects the number of NARs being generated and mutated. Larger values " + "are slower but output more NARs.\n") + algo.execute(minconf=0.7, minsup=0.1, population_size=500, + max_fitness_evaluations=700) + print_10_discovered_nars(algo, pdtable) + print("\nThe above NAR is the only one discovered with these settings. The NAR " + "states that about 92% of all dog breeds of type " + "'Hound' have an intelligence rating between 6 and 8 out of 10 and are between " + "sizes 0 and 4 out of 5 (0 being 'Toy' and 5 being 'Giant'). This suggests " + "that, in general, hounds are intelligent dogs and no more than " + "8% of all hounds are of 'Giant' size. Let's see if that is true.\n") + + + + + hound_rows = pdtable[pdtable['Type'] == 'Hound'] + + line_number_counter = 0 + red_line_indices = [] + for index, row in hound_rows.iterrows(): + if row['Intelligence'] < 6 or row['Intelligence'] > 8: + red_line_indices.append(line_number_counter) + line_number_counter += 1 + + hound_row_strings = hound_rows[['Name', 'Intelligence', 'Size']].to_string().splitlines() + for i in range(0, len(hound_row_strings)): + if i-1 in red_line_indices: + print(CLR['red_bg'], hound_row_strings[i], CLR['default_bg']) + else: + print(hound_row_strings[i]) + + print("\nAs can be seen, only 2 rows that have 'Type' equal to 'Hound' don't " + "have an intelligence rating between 6 and 8.") + print("Let's try again, but this time with different settings. This time, minsup " + "will have a more lenient value of 0.05 and the population size will be 700. " + "This will help discover more NARs. The value of max_fitness_evaluations " + "will also need to be increased to 1500 in accordance with the population " + "size to produce a non-empty result.\n") + algo.execute(minconf=0.7, minsup=0.05, population_size=700, + max_fitness_evaluations=1500) + print_10_discovered_nars(algo, pdtable) diff --git a/examples/datasets/dog_breeds.csv b/examples/datasets/dog_breeds.csv new file mode 100644 index 0000000000..05f271d147 --- /dev/null +++ b/examples/datasets/dog_breeds.csv @@ -0,0 +1,160 @@ +Name,Origin,Type,Friendliness,Life Span,Size,Grooming Needs,Exercise Requirements,Good with Children,Intelligence,Shedding,Health Issues Risk,Weight,Training Difficulty +Affenpinscher,Germany,Toy,7,14,1,High,1.5,Yes,8,Moderate,Low,4,6 +Afghan Hound,Afghanistan,Hound,5,13,3,Very High,2,No,4,High,Moderate,25,8 +Airedale Terrier,England,Terrier,8,12,2,High,2,Yes,7,Moderate,Low,21,6 +Akita,Japan,Working,6,11,3,Moderate,2,With Training,7,High,High,45,9 +Alaskan Malamute,Alaska USA,Working,7,11,3,High,3,Yes,6,Very High,Moderate,36,8 +American Bulldog,USA,Working,8,11,3,Low,2,Yes,6,Moderate,Moderate,42,7 +American Eskimo,USA,Non-Sporting,9,14,2,High,2,Yes,9,High,Low,12,5 +American Foxhound,USA,Hound,8,12,2,Low,2.5,Yes,6,Moderate,Low,31,6 +Australian Cattle Dog,Australia,Herding,7,14,2,Moderate,2.5,Yes,9,Moderate,Low,15,7 +Australian Shepherd,USA,Herding,8,14,2,High,2.5,Yes,9,High,Moderate,25,7 +Australian Terrier,Australia,Terrier,7,13,1,Moderate,1.5,Yes,7,Low,Low,6.5,6 +Basenji,Central Africa,Hound,6,13,2,Low,2,No,6,Low,Low,10,9 +Basset Hound,France,Hound,8,11,2,Low,1,Yes,5,Moderate,High,24,7 +Beagle,England,Hound,9,13,2,Low,2,Yes,7,Moderate,Moderate,10,7 +Bearded Collie,Scotland,Herding,8,13,2,Very High,2,Yes,8,High,Low,22,6 +Bernese Mountain Dog,Switzerland,Working,9,8,3,High,1.5,Yes,7,High,High,43,5 +Bichon Frise,Mediterranean,Non-Sporting,9,13,1,Very High,1,Yes,8,Low,Low,4,5 +Black Russian Terrier,Russia,Working,7,11,3,High,2,Yes,8,Moderate,Moderate,50,8 +Bloodhound,Belgium,Hound,7,11,3,Moderate,2,Yes,6,Moderate,High,43,8 +Border Collie,UK,Herding,8,13,2,High,3,Yes,10,Moderate,Low,17,6 +Border Terrier,UK,Terrier,8,13,1,Moderate,1.5,Yes,7,Moderate,Low,6,6 +Borzoi,Russia,Hound,6,11,3,High,2,No,6,Moderate,Low,37,7 +Boston Terrier,USA,Non-Sporting,9,12,1,Low,1.5,Yes,8,Low,Moderate,9,5 +Bouvier des Flandres,Belgium,Herding,7,11,3,Very High,2,Yes,8,High,Moderate,34,7 +Boxer,Germany,Working,9,11,3,Low,2,Yes,7,Moderate,Moderate,28,6 +Briard,France,Herding,7,12,3,High,2,Yes,8,Moderate,Low,35,7 +Brittany,France,Sporting,8,13,2,Moderate,2.5,Yes,8,Moderate,Low,17,5 +Brussels Griffon,Belgium,Toy,7,13,1,High,1.5,Yes,8,Moderate,Moderate,4,7 +Bull Terrier,England,Terrier,7,12,2,Low,2,With Training,7,Low,Moderate,27,7 +Bullmastiff,England,Working,6,9,3,Low,1.5,With Training,6,Moderate,High,52,7 +Cairn Terrier,Scotland,Terrier,8,14,1,Moderate,1.5,Yes,7,Moderate,Low,7,6 +Canaan Dog,Israel,Herding,6,13,2,Low,2,With Training,8,Moderate,Low,21,8 +Cane Corso,Italy,Working,6,11,3,Low,2,With Training,7,Low,Moderate,45,9 +Cardigan Welsh Corgi,Wales,Herding,8,13,1,Moderate,2,Yes,8,High,Moderate,13,6 +Cavalier King Charles Spaniel,UK,Toy,10,11,1,Moderate,1,Yes,6,Moderate,High,6,4 +Chesapeake Bay Retriever,USA,Sporting,7,11,3,Moderate,2.5,Yes,7,Moderate,Low,30,7 +Chihuahua,Mexico,Toy,6,16,1,Low,1,No,7,Low,Moderate,2,7 +Chinese Crested,China,Toy,7,14,1,High,1,Yes,8,Low,Low,3,6 +Chinese Shar-Pei,China,Non-Sporting,6,10,2,Low,1.5,With Training,6,Moderate,High,22,8 +Chow Chow,China,Non-Sporting,5,10,2,High,1.5,No,5,High,High,26,9 +Clumber Spaniel,England,Sporting,7,11,2,Moderate,1.5,Yes,6,High,Moderate,31,6 +Cocker Spaniel,England,Sporting,9,13,2,High,1.5,Yes,7,High,Moderate,12,5 +Collie,Scotland,Herding,9,13,2,High,2,Yes,8,High,Moderate,24,5 +Curly-Coated Retriever,England,Sporting,7,12,3,Moderate,2,Yes,7,Low,Low,32,6 +Dachshund,Germany,Hound,7,14,1,Low,1.5,With Training,7,Moderate,High,10,7 +Dalmatian,Croatia,Non-Sporting,8,12,2,Low,2.5,Yes,7,Moderate,High,24,7 +Dandie Dinmont Terrier,Scotland,Terrier,7,13,1,Moderate,1.5,Yes,7,Low,Low,8,7 +Doberman Pinscher,Germany,Working,8,11,3,Low,2.5,With Training,9,Low,Moderate,35,7 +English Bulldog,England,Non-Sporting,7,9,2,Low,1,Yes,6,Moderate,High,20,7 +English Cocker Spaniel,England,Sporting,8,12,2,High,1.5,Yes,7,Moderate,Moderate,14,5 +English Foxhound,England,Hound,7,12,2,Low,2.5,Yes,6,Moderate,Low,29,7 +English Setter,England,Sporting,8,12,2,High,2,Yes,7,Moderate,Moderate,26,6 +English Springer Spaniel,England,Sporting,9,13,2,High,2,Yes,7,Moderate,Moderate,20,6 +English Toy Spaniel,England,Toy,8,11,1,High,1,Yes,7,Moderate,Moderate,5,6 +Entlebucher Mountain Dog,Switzerland,Herding,7,12,2,Low,2.5,Yes,8,Moderate,Low,27,7 +Field Spaniel,England,Sporting,7,12,2,High,2,Yes,7,Moderate,Low,18,6 +Finnish Lapphund,Finland,Herding,8,12,2,High,2,Yes,7,High,Low,20,6 +Finnish Spitz,Finland,Non-Sporting,7,13,2,Moderate,2,Yes,8,Moderate,Low,15,7 +Flat-Coated Retriever,England,Sporting,9,11,3,Moderate,2.5,Yes,8,Moderate,Moderate,32,5 +French Bulldog,France,Non-Sporting,8,11,1,Low,1,Yes,7,Low,High,11,6 +German Pinscher,Germany,Working,7,13,2,Low,2,With Training,8,Moderate,Low,13,7 +German Shepherd,Germany,Herding,8,11,3,Moderate,2.5,With Training,9,High,Moderate,31,6 +German Shorthaired Pointer,Germany,Sporting,8,13,3,Low,2.5,Yes,8,Moderate,Low,26,6 +German Wirehaired Pointer,Germany,Sporting,7,13,3,Moderate,2.5,Yes,8,Moderate,Low,27,7 +Giant Schnauzer,Germany,Working,7,13,3,High,2,With Training,8,Low,Moderate,38,8 +Golden Retriever,Scotland,Sporting,10,11,3,High,2,Yes,8,High,Moderate,29,4 +Gordon Setter,Scotland,Sporting,8,11,3,High,2,Yes,7,Moderate,Moderate,26,6 +Great Dane,Germany,Working,8,8,4,Low,2,Yes,6,Moderate,High,67,6 +Great Pyrenees,France,Working,7,11,3,High,1.5,Yes,6,High,Moderate,46,8 +Greater Swiss Mountain Dog,Switzerland,Working,8,10,3,Low,2,Yes,7,Moderate,Moderate,61,7 +Greyhound,Egypt,Hound,7,11,3,Low,2,Yes,7,Low,Low,33,6 +Harrier,England,Hound,8,12,2,Low,2,Yes,6,Moderate,Low,25,6 +Havanese,Cuba,Toy,9,14,1,High,1.5,Yes,8,Low,Low,5,5 +Ibizan Hound,Spain,Hound,7,13,2,Low,2,Yes,7,Low,Low,22,7 +Icelandic Sheepdog,Iceland,Herding,8,12,2,Moderate,2,Yes,7,Moderate,Low,14,6 +Irish Red and White Setter,Ireland,Sporting,8,12,3,High,2.5,Yes,7,Moderate,Moderate,27,6 +Irish Setter,Ireland,Sporting,8,13,3,High,2.5,Yes,7,High,Moderate,29,6 +Irish Terrier,Ireland,Terrier,7,13,2,Moderate,1.5,Yes,7,Low,Low,11,7 +Irish Water Spaniel,Ireland,Sporting,8,11,3,High,2,Yes,7,Low,Low,24,6 +Irish Wolfhound,Ireland,Hound,7,7,4,Moderate,2,Yes,6,Moderate,High,54,6 +Italian Greyhound,Italy,Toy,7,13,1,Low,1.5,No,7,Low,Moderate,4,7 +Japanese Chin,Japan,Toy,7,11,1,Moderate,1,Yes,7,Moderate,Low,3,6 +Japanese Spitz,Japan,Non-Sporting,8,13,1,High,1.5,Yes,8,High,Low,6,6 +Keeshond,Netherlands,Non-Sporting,8,13,2,High,1.5,Yes,8,High,Low,16,6 +Kerry Blue Terrier,Ireland,Terrier,7,13,2,High,1.5,Yes,7,Low,Low,16,7 +Komondor,Hungary,Working,6,11,3,Very High,2,With Training,6,Low,Low,40,8 +Kuvasz,Hungary,Working,6,11,3,Moderate,2,With Training,7,Moderate,Moderate,42,8 +Labrador Retriever,Canada,Sporting,10,11,3,Moderate,2,Yes,8,High,Moderate,30,4 +Lakeland Terrier,England,Terrier,7,13,1,Moderate,1.5,Yes,7,Low,Low,7,7 +Leonberger,Germany,Working,8,9,4,High,2,Yes,7,High,High,61,8 +Lhasa Apso,Tibet,Non-Sporting,6,13,1,Very High,1,No,7,Low,Low,6,8 +Lowchen,France,Non-Sporting,8,14,1,High,1.5,Yes,8,Low,Low,6,6 +Maltese,Malta,Toy,8,13,1,Very High,1,No,7,Low,Low,2.5,6 +Manchester Terrier,England,Terrier,7,15,2,Low,1.5,With Training,8,Moderate,Low,7,7 +Mastiff,England,Working,6,9,4,Low,1.5,Yes,6,Moderate,High,78,7 +Miniature Pinscher,Germany,Toy,6,13,1,Low,1.5,No,7,Low,Low,4,8 +Miniature Schnauzer,Germany,Standard,8,12,1,High,1.5,Yes,8,Moderate,Low,8,6 +Neapolitan Mastiff,Italy,Working,6,8,3,Moderate,1,Yes,5,Moderate,High,70,8 +Newfoundland,Canada,Working,9,9,4,High,2,Yes,7,Moderate,Moderate,61,7 +Norfolk Terrier,England,Terrier,8,14,1,Low,1.5,Yes,7,Low,Low,5,6 +Norwegian Buhund,Norway,Herding,8,12,2,Moderate,2,Yes,7,Moderate,Low,12,6 +Norwegian Elkhound,Norway,Hound,7,12,2,Moderate,2,Yes,7,Moderate,Moderate,23,7 +Norwegian Lundehund,Norway,Non-Sporting,7,12,1,High,2,Yes,7,Moderate,High,8,7 +Old English Sheepdog,England,Herding,8,10,3,Very High,2,Yes,6,High,Moderate,32,6 +Otterhound,England,Hound,7,10,3,Very High,2.5,Yes,6,High,Moderate,37,7 +Papillon,France,Toy,9,13,1,Moderate,1,Yes,8,Low,Low,3,5 +Pekingese,China,Toy,6,12,1,Very High,1,With Training,5,Moderate,High,5,7 +Pembroke Welsh Corgi,Wales,Herding,9,12,1,Moderate,2,Yes,8,Moderate,Moderate,12,5 +Petit Basset Griffon Vendeen,France,Hound,7,12,1,High,2,Yes,6,High,Moderate,15,7 +Pharaoh Hound,Malta,Hound,7,12,2,Moderate,2,Yes,8,Moderate,Low,20,7 +Pointer,England,Sporting,8,12,2,Moderate,2.5,Yes,7,Moderate,Moderate,25,6 +Pomeranian,Germany,Toy,8,12,1,High,1,Yes,7,High,Moderate,3,7 +Poodle (Miniature),France,Non-Sporting,8,15,1,Very High,1.5,Yes,8,Low,Low,7,6 +Poodle (Standard),France,Non-Sporting,9,12,3,Very High,2,Yes,8,Moderate,Moderate,22,5 +Poodle (Toy),France,Toy,9,15,0,Very High,1,Yes,8,Low,Low,4,5 +Portuguese Podengo,Portugal,Hound,7,12,2,Moderate,2,Yes,8,Moderate,Low,15,8 +Portuguese Water Dog,Portugal,Sporting,8,11,2,High,2,Yes,8,Moderate,Moderate,18,6 +Pudelpointer,Germany,Sporting,7,12,2,Moderate,2.5,Yes,8,Moderate,Low,23,7 +Pug,China,Toy,8,12,1,Moderate,1,Yes,7,Moderate,High,7,6 +Pyrenean Mountain Dog,France,Working,7,10,4,High,2,Yes,6,High,High,54,7 +Rat Terrier,USA,Terrier,7,15,2,Low,2,Yes,7,Moderate,Moderate,5,7 +Redbone Coonhound,USA,Hound,8,12,2,Moderate,2,Yes,6,Moderate,Low,25,7 +Rhodesian Ridgeback,Africa,Hound,6,11,3,Moderate,2.5,With Training,8,Moderate,Moderate,36,7 +Rottweiler,Germany,Working,7,9,3,Moderate,2,With Training,8,High,High,40,8 +Saint Bernard,Switzerland,Working,9,8,4,High,2,Yes,6,High,Moderate,68,7 +Saluki,Middle East,Hound,6,12,2,Moderate,2.5,No,7,Moderate,Moderate,22,7 +Samoyed,Siberia,Working,9,12,2,High,2,Yes,7,High,Moderate,21,7 +Schipperke,Belgium,Non-Sporting,7,13,1,Moderate,2,No,7,Moderate,Moderate,7,7 +Scottish Deerhound,Scotland,Hound,6,8,3,Moderate,2,Yes,6,Moderate,Moderate,41,7 +Scottish Terrier,Scotland,Terrier,7,12,1,Moderate,1.5,Yes,6,Moderate,High,9,7 +Shetland Sheepdog,Scotland,Herding,9,12,2,High,2,Yes,8,High,Moderate,11,5 +Shiba Inu,Japan,Non-Sporting,7,13,1,Moderate,2,No,7,Moderate,Moderate,9,7 +Shih Tzu,China,Toy,8,14,1,Very High,1,Yes,6,Moderate,Moderate,4,7 +Siberian Husky,Siberia,Working,8,12,2,Moderate,2.5,Yes,7,Moderate,Moderate,21,7 +Silky Terrier,Australia,Terrier,7,13,1,High,1.5,Yes,7,Moderate,Low,4,7 +Skye Terrier,Scotland,Terrier,7,13,1,Moderate,1.5,No,6,Moderate,Moderate,8,7 +Sloughi,North Africa,Hound,6,12,2,Low,2.5,With Training,7,Low,Moderate,18,7 +Smooth Fox Terrier,England,Terrier,7,13,1,Low,2,Yes,7,Moderate,Moderate,7,7 +Soft-Coated Wheaten Terrier,Ireland,Terrier,8,12,2,High,2,Yes,7,Moderate,Moderate,12,6 +Spanish Water Dog,Spain,Sporting,7,12,2,Very High,2,Yes,8,Moderate,Moderate,15,6 +Spinone Italiano,Italy,Sporting,7,12,3,High,2,Yes,7,Moderate,Moderate,32,7 +Staffordshire Bull Terrier,England,Terrier,7,12,2,Low,2,Yes,7,Moderate,High,16,7 +Standard Poodle,France,Non-Sporting,9,12,3,Very High,2,Yes,8,Moderate,Moderate,26,5 +Standard Schnauzer,Germany,Standard,7,15,2,High,2,Yes,7,Moderate,Moderate,14,6 +Sussex Spaniel,England,Sporting,7,11,2,High,1.5,Yes,6,Moderate,Moderate,18,6 +Swedish Vallhund,Sweden,Herding,8,12,2,Moderate,2,Yes,8,Moderate,Low,12,7 +Thai Ridgeback,Thailand,Hound,6,12,2,Moderate,2,With Training,7,Moderate,Moderate,15,7 +Tibetan Mastiff,Tibet,Working,7,10,3,High,2,With Training,6,Moderate,Moderate,45,8 +Toy Fox Terrier,USA,Toy,8,15,0,Moderate,1.5,Yes,8,Low,Low,2,7 +Treeing Walker Coonhound,USA,Hound,8,12,2,Moderate,2,Yes,7,Moderate,Moderate,20,7 +Welsh Springer Spaniel,Wales,Sporting,8,13,2,High,2,Yes,7,Moderate,Moderate,16,6 +Welsh Terrier,Wales,Terrier,7,14,2,Moderate,1.5,Yes,7,Moderate,Moderate,9,7 +West Highland White Terrier,Scotland,Terrier,8,13,1,Moderate,1.5,Yes,7,Moderate,Moderate,7,7 +Whippet,England,Hound,7,13,2,Low,2,Yes,8,Low,Low,8,6 +Wire Fox Terrier,England,Terrier,7,14,1,Moderate,2,Yes,7,Moderate,Moderate,8,7 +Wirehaired Dachshund,Germany,Hound,7,13,1,Moderate,1.5,With Training,7,Moderate,High,8,7 +Wirehaired Pointing Griffon,Netherlands,Sporting,7,13,2,High,2,Yes,7,Moderate,Moderate,20,6 +Xoloitzcuintli,Mexico,Non-Sporting,7,15,3,Low,2,With Training,8,Low,Moderate,25,6 +Yorkshire Terrier,England,Toy,8,13,0,High,1,Yes,7,Moderate,Moderate,2.5,6