@Pak running it now, I wasn’t able to get to it yesterday. However I did run it today. My results differed from yours a bit. Here is my new function, where we take in a test dataframe and shuffle each column one at a time and validate over it:

```
import copy
def feature_importance(learn:Learner, cats:list, conts:list, dep_var:str, test:DataFrame):
data = learn.data.train_ds.x
procs = data.procs
cat, cont = copy.deepcopy(cats), copy.deepcopy(conts)
if 'CrossEntropyLoss' in str(learn.loss_func):
dt = (TabularList.from_df(test, path='', cat_names=cat, cont_names=cont,
procs=procs)
.split_none()
.label_from_df(cols=dep_var)
.databunch(bs=learn.data.batch_size))
else:
dt = (TabularList.from_df(test, path='', cat_names=cat, cont_names=cont,
procs=procs)
.split_none()
.label_from_df(cols=dep_var, label_cls=FloatList, log=True)
.databunch(bs=learn.data.batch_size))
learn.data.valid_dl = dt.train_dl
loss0 = float(learn.validate()[1])
fi=dict()
cat, cont = copy.deepcopy(cats), copy.deepcopy(conts)
types = [cat, cont]
for j, t in enumerate(types):
for i, c in enumerate(t):
print(c)
base = test.copy()
base[c] = base[c].sample(n=len(base), replace=True).reset_index(drop=True)
cat, cont = copy.deepcopy(cats), copy.deepcopy(conts)
if 'CrossEntropyLoss' in str(learn.loss_func):
dt = (TabularList.from_df(base, path='', cat_names=cat, cont_names=cont,
procs=procs)
.split_none()
.label_from_df(cols=dep_var)
.databunch(bs=learn.data.batch_size))
else:
dt = (TabularList.from_df(test, path='', cat_names=cat, cont_names=cont,
procs=procs)
.split_none()
.label_from_df(cols=dep_var, label_cls=FloatList, log=True)
.databunch(bs=learn.data.batch_size))
learn.data.valid_dl = dt.train_dl
fi[c] = float(learn.validate()[1]) - loss0
d = sorted(fi.items(), key =lambda kv: kv[1], reverse=True)
df = pd.DataFrame({'Variable': [l for l, v in d], 'Accuracy': [v for l, v in d]})
df['Type'] = ''
for x in range(len(df)):
if df['Variable'].iloc[x] in cats:
df['Type'].iloc[x] = 'categorical'
if df['Variable'].iloc[x] in conts:
df['Type'].iloc[x] = 'continuous'
return df
```

This allows for a very standard approach to the two default loss functions Fast.AI will use. My results were different than yours though. Anything negative was a negative impact on the training, so they were the best.

```
╔════════╦══════════════════════════╦═══════════╦═════════════╗
║ Number ║ Variable ║ Accuracy ║ Type ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 0 ║ SchoolHoliday ║ 0.001581 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 1 ║ trend ║ 0.001569 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 2 ║ AfterStateHoliday ║ 0.001444 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 3 ║ Month ║ 0.001159 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 4 ║ StateHoliday_bw ║ 0.001103 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 5 ║ trend_DE ║ 0.001090 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 6 ║ Min_Humidity ║ 0.001085 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 7 ║ Max_Wind_SpeedKm_h ║ 0.000958 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 8 ║ Max_TemperatureC ║ 0.000871 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 9 ║ StateHoliday ║ 0.000795 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 10 ║ Min_TemperatureC ║ 0.000791 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 11 ║ Events ║ 0.000748 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 12 ║ PromoInterval ║ 0.000531 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 13 ║ Promo2Weeks ║ 0.000477 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 14 ║ StoreType ║ 0.000465 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 15 ║ Promo2SinceYear ║ 0.000420 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 16 ║ Store ║ 0.000397 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 17 ║ Year ║ 0.000392 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 18 ║ CompetitionMonthsOpen ║ 0.000334 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 19 ║ BeforeStateHoliday ║ 0.000255 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 20 ║ State ║ 0.000107 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 21 ║ Assortment ║ -0.000095 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 22 ║ Day ║ -0.000122 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 23 ║ Promo_bw ║ -0.000333 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 24 ║ CloudCover ║ -0.000406 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 25 ║ Mean_TemperatureC ║ -0.000516 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 26 ║ Promo ║ -0.001300 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 27 ║ SchoolHoliday_bw ║ -0.001309 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 28 ║ Mean_Humidity ║ -0.001415 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 29 ║ SchoolHoliday_fw ║ -0.001569 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 30 ║ StateHoliday_fw ║ -0.001817 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 31 ║ Week ║ -0.004419 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 32 ║ DayOfWeek ║ -0.008283 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 33 ║ Max_Humidity ║ -0.008312 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 34 ║ CompetitionDistance ║ -0.008432 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 35 ║ CompetitionOpenSinceYear ║ -0.008464 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 36 ║ Mean_Wind_SpeedKm_h ║ -0.008909 ║ continuous ║
╚════════╩══════════════════════════╩═══════════╩═════════════╝
```

Store wound up being somewhere in the middle here, so perhaps I am doing something wrong?

Here are the results given the old function from earlier posts:

```
╔════════╦══════════════════════════╦═══════════╦═════════════╗
║ Number ║ Variable ║ Accuracy ║ Type ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 0 ║ Mean_Wind_SpeedKm_h ║ 0.000946 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 1 ║ Promo_bw ║ 0.000924 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 2 ║ Promo ║ 0.000844 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 3 ║ Store ║ 0.000747 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 4 ║ SchoolHoliday_fw ║ 0.000728 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 5 ║ Promo2SinceYear ║ 0.000717 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 6 ║ Assortment ║ 0.000653 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 7 ║ Promo_fw ║ 0.000611 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 8 ║ StateHoliday_fw ║ 0.000428 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 9 ║ Day ║ 0.000400 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 10 ║ Max_Wind_SpeedKm_h ║ 0.000358 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 11 ║ CompetitionDistance_na ║ 0.000294 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 12 ║ Month ║ 0.000185 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 13 ║ trend_DE ║ 0.000050 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 14 ║ BeforeStateHoliday ║ 0.000014 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 15 ║ SchoolHoliday ║ -0.000037 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 16 ║ CompetitionMonthsOpen ║ -0.000058 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 17 ║ StateHoliday ║ -0.000058 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 18 ║ Max_Humidity ║ -0.000077 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 19 ║ Mean_TemperatureC ║ -0.000136 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 20 ║ StateHoliday_bw ║ -0.000148 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 21 ║ StoreType ║ -0.000163 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 22 ║ Mean_Humidity ║ -0.000193 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 23 ║ SchoolHoliday_bw ║ -0.000246 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 24 ║ DayOfWeek ║ -0.000286 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 25 ║ trend ║ -0.000390 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 26 ║ Promo2Weeks ║ -0.000517 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 27 ║ Min_Humidity ║ -0.000906 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 28 ║ PromoInterval ║ -0.000937 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 29 ║ Min_TemperatureC ║ -0.001001 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 30 ║ CompetitionOpenSinceYear ║ -0.001064 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 31 ║ AfterStateHoliday ║ -0.001515 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 32 ║ CloudCover ║ -0.001570 ║ continuous ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 33 ║ State ║ -0.002007 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 34 ║ Events ║ -0.002613 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 35 ║ Year ║ -0.003186 ║ categorical ║
╠════════╬══════════════════════════╬═══════════╬═════════════╣
║ 36 ║ CompetitionDistance ║ -0.005161 ║ continuous ║
╚════════╩══════════════════════════╩═══════════╩═════════════╝
```

Both of these are under the guise where importance is calculated by shuffled_accuracy - baseline_accuracy.

Let me know your thoughts.