Now, let's compare the two experiments together and see which feature is the best.


In [1]:
import numpy as np
import pandas as pd
%matplotlib inline

In [2]:
df_uni = pd.read_hdf('../reports/large-exp-unigram-feats.h5', 'df')          # unigram features
df_rea = pd.read_hdf('../reports/large-exp-readability-feats.h5', 'df')      # readability features

In [3]:
df_uni.T


Out[3]:
method txt_comp_dist
feature unigram
metric euclidean
norm_dir bbs152930 phy17301 mus1139
oot_dir bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008
num_norm num_oot num_top result k
10 1 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.266667 0.000000 0.200000 0.066667 0.000000 0.366667 0.066667 0.466667 0.300000
1 0.733333 1.000000 0.800000 0.933333 1.000000 0.633333 0.933333 0.533333 0.700000
3 base 0 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273
1 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727
perf 0 0.066667 0.066667 0.100000 0.000000 0.000000 0.066667 0.166667 0.300000 0.133333
1 0.933333 0.933333 0.900000 1.000000 1.000000 0.933333 0.833333 0.700000 0.866667
5 base 0 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455
1 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545
perf 0 0.100000 0.033333 0.100000 0.000000 0.000000 0.066667 0.033333 0.100000 0.033333
1 0.900000 0.966667 0.900000 1.000000 1.000000 0.933333 0.966667 0.900000 0.966667
4 1 base 0 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286
1 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714
perf 0 0.066667 0.066667 0.166667 0.133333 0.000000 0.200000 0.100000 0.266667 0.200000
1 0.933333 0.933333 0.833333 0.866667 1.000000 0.800000 0.900000 0.733333 0.800000
3 base 0 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670
1 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505
2 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835
3 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989
perf 0 0.033333 0.066667 0.066667 0.000000 0.000000 0.166667 0.133333 0.200000 0.166667
1 0.133333 0.133333 0.266667 0.133333 0.033333 0.333333 0.333333 0.333333 0.366667
2 0.300000 0.233333 0.266667 0.300000 0.133333 0.333333 0.300000 0.233333 0.200000
3 0.533333 0.566667 0.400000 0.566667 0.833333 0.166667 0.233333 0.233333 0.266667
5 base 0 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874
1 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580
2 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640
3 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910
4 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995
perf 0 0.000000 0.033333 0.000000 0.000000 0.000000 0.000000 0.033333 0.000000 0.033333
... ... ... ... ... ... ... ... ... ... ... ... ... ...
80 4 5 base 4 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003
perf 0 0.033333 0.000000 0.000000 0.066667 0.000000 0.300000 0.400000 0.333333 0.633333
1 0.366667 0.000000 0.033333 0.200000 0.100000 0.400000 0.366667 0.366667 0.233333
2 0.366667 0.066667 0.500000 0.533333 0.333333 0.266667 0.133333 0.233333 0.133333
3 0.233333 0.433333 0.400000 0.200000 0.466667 0.033333 0.100000 0.066667 0.000000
4 0.000000 0.500000 0.066667 0.000000 0.100000 0.000000 0.000000 0.000000 0.000000
8 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.766667 0.533333 0.800000 0.300000 0.066667 0.733333 0.500000 0.366667 0.766667
1 0.233333 0.466667 0.200000 0.700000 0.933333 0.266667 0.500000 0.633333 0.233333
3 base 0 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706
1 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371
2 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413
3 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510
perf 0 0.066667 0.000000 0.000000 0.000000 0.000000 0.266667 0.366667 0.266667 0.233333
1 0.233333 0.000000 0.066667 0.166667 0.033333 0.533333 0.300000 0.433333 0.666667
2 0.700000 0.966667 0.933333 0.600000 0.600000 0.200000 0.300000 0.166667 0.100000
3 0.000000 0.033333 0.000000 0.233333 0.366667 0.000000 0.033333 0.133333 0.000000
5 base 0 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645
1 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971
2 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722
3 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517
4 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143
5 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001
perf 0 0.000000 0.000000 0.000000 0.000000 0.000000 0.133333 0.233333 0.400000 0.366667
1 0.100000 0.000000 0.266667 0.166667 0.000000 0.166667 0.333333 0.166667 0.300000
2 0.300000 0.000000 0.100000 0.266667 0.066667 0.500000 0.366667 0.300000 0.333333
3 0.400000 0.100000 0.433333 0.500000 0.400000 0.166667 0.066667 0.133333 0.000000
4 0.200000 0.900000 0.200000 0.066667 0.466667 0.033333 0.000000 0.000000 0.000000
5 0.000000 0.000000 0.000000 0.000000 0.066667 0.000000 0.000000 0.000000 0.000000

116 rows × 9 columns


In [4]:
df_rea.T


Out[4]:
method txt_comp_dist
feature readability
metric euclidean
norm_dir bbs152930 phy17301 mus1139
oot_dir bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008
num_norm num_oot num_top result k
10 1 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.966667 0.966667 1.000000 0.933333 0.800000 0.933333 0.933333 0.966667 1.000000
1 0.033333 0.033333 0.000000 0.066667 0.200000 0.066667 0.066667 0.033333 0.000000
3 base 0 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273
1 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727
perf 0 0.633333 0.333333 0.433333 0.666667 0.300000 0.700000 0.900000 0.833333 0.933333
1 0.366667 0.666667 0.566667 0.333333 0.700000 0.300000 0.100000 0.166667 0.066667
5 base 0 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455
1 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545
perf 0 0.500000 0.233333 0.500000 0.233333 0.033333 0.166667 0.900000 0.633333 0.866667
1 0.500000 0.766667 0.500000 0.766667 0.966667 0.833333 0.100000 0.366667 0.133333
4 1 base 0 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286
1 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714
perf 0 0.833333 0.900000 0.966667 0.733333 0.633333 0.800000 0.733333 0.833333 0.933333
1 0.166667 0.100000 0.033333 0.266667 0.366667 0.200000 0.266667 0.166667 0.066667
3 base 0 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670
1 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505
2 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835
3 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989
perf 0 0.300000 0.000000 0.133333 0.033333 0.000000 0.266667 0.700000 0.666667 0.700000
1 0.466667 0.366667 0.700000 0.666667 0.366667 0.500000 0.300000 0.266667 0.300000
2 0.233333 0.633333 0.166667 0.300000 0.633333 0.233333 0.000000 0.066667 0.000000
3 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
5 base 0 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874
1 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580
2 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640
3 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910
4 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995
perf 0 0.100000 0.000000 0.266667 0.000000 0.000000 0.133333 0.500000 0.166667 0.500000
... ... ... ... ... ... ... ... ... ... ... ... ... ...
80 4 5 base 4 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003
perf 0 0.933333 0.933333 0.933333 0.733333 0.366667 0.700000 0.733333 0.833333 0.800000
1 0.066667 0.066667 0.066667 0.233333 0.533333 0.300000 0.233333 0.166667 0.200000
2 0.000000 0.000000 0.000000 0.033333 0.066667 0.000000 0.033333 0.000000 0.000000
3 0.000000 0.000000 0.000000 0.000000 0.033333 0.000000 0.000000 0.000000 0.000000
4 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
8 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.933333 1.000000 0.966667 0.833333 0.766667 0.933333 0.700000 1.000000 0.966667
1 0.066667 0.000000 0.033333 0.166667 0.233333 0.066667 0.300000 0.000000 0.033333
3 base 0 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706
1 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371
2 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413
3 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510
perf 0 0.900000 1.000000 0.900000 0.366667 0.166667 0.800000 0.766667 1.000000 0.866667
1 0.100000 0.000000 0.100000 0.533333 0.333333 0.200000 0.233333 0.000000 0.133333
2 0.000000 0.000000 0.000000 0.100000 0.500000 0.000000 0.000000 0.000000 0.000000
3 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
5 base 0 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645
1 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971
2 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722
3 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517
4 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143
5 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001
perf 0 0.966667 0.933333 0.966667 0.533333 0.066667 0.600000 0.633333 0.600000 0.933333
1 0.033333 0.066667 0.033333 0.433333 0.300000 0.400000 0.366667 0.400000 0.066667
2 0.000000 0.000000 0.000000 0.033333 0.500000 0.000000 0.000000 0.000000 0.000000
3 0.000000 0.000000 0.000000 0.000000 0.100000 0.000000 0.000000 0.000000 0.000000
4 0.000000 0.000000 0.000000 0.000000 0.033333 0.000000 0.000000 0.000000 0.000000
5 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

116 rows × 9 columns


In [5]:
df_uni = df_uni.T; df_rea = df_rea.T

In [6]:
df_uni


Out[6]:
method txt_comp_dist
feature unigram
metric euclidean
norm_dir bbs152930 phy17301 mus1139
oot_dir bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008
num_norm num_oot num_top result k
10 1 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.266667 0.000000 0.200000 0.066667 0.000000 0.366667 0.066667 0.466667 0.300000
1 0.733333 1.000000 0.800000 0.933333 1.000000 0.633333 0.933333 0.533333 0.700000
3 base 0 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273
1 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727
perf 0 0.066667 0.066667 0.100000 0.000000 0.000000 0.066667 0.166667 0.300000 0.133333
1 0.933333 0.933333 0.900000 1.000000 1.000000 0.933333 0.833333 0.700000 0.866667
5 base 0 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455
1 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545
perf 0 0.100000 0.033333 0.100000 0.000000 0.000000 0.066667 0.033333 0.100000 0.033333
1 0.900000 0.966667 0.900000 1.000000 1.000000 0.933333 0.966667 0.900000 0.966667
4 1 base 0 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286
1 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714
perf 0 0.066667 0.066667 0.166667 0.133333 0.000000 0.200000 0.100000 0.266667 0.200000
1 0.933333 0.933333 0.833333 0.866667 1.000000 0.800000 0.900000 0.733333 0.800000
3 base 0 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670
1 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505
2 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835
3 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989
perf 0 0.033333 0.066667 0.066667 0.000000 0.000000 0.166667 0.133333 0.200000 0.166667
1 0.133333 0.133333 0.266667 0.133333 0.033333 0.333333 0.333333 0.333333 0.366667
2 0.300000 0.233333 0.266667 0.300000 0.133333 0.333333 0.300000 0.233333 0.200000
3 0.533333 0.566667 0.400000 0.566667 0.833333 0.166667 0.233333 0.233333 0.266667
5 base 0 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874
1 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580
2 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640
3 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910
4 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995
perf 0 0.000000 0.033333 0.000000 0.000000 0.000000 0.000000 0.033333 0.000000 0.033333
... ... ... ... ... ... ... ... ... ... ... ... ... ...
80 4 5 base 4 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003
perf 0 0.033333 0.000000 0.000000 0.066667 0.000000 0.300000 0.400000 0.333333 0.633333
1 0.366667 0.000000 0.033333 0.200000 0.100000 0.400000 0.366667 0.366667 0.233333
2 0.366667 0.066667 0.500000 0.533333 0.333333 0.266667 0.133333 0.233333 0.133333
3 0.233333 0.433333 0.400000 0.200000 0.466667 0.033333 0.100000 0.066667 0.000000
4 0.000000 0.500000 0.066667 0.000000 0.100000 0.000000 0.000000 0.000000 0.000000
8 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.766667 0.533333 0.800000 0.300000 0.066667 0.733333 0.500000 0.366667 0.766667
1 0.233333 0.466667 0.200000 0.700000 0.933333 0.266667 0.500000 0.633333 0.233333
3 base 0 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706
1 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371
2 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413
3 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510
perf 0 0.066667 0.000000 0.000000 0.000000 0.000000 0.266667 0.366667 0.266667 0.233333
1 0.233333 0.000000 0.066667 0.166667 0.033333 0.533333 0.300000 0.433333 0.666667
2 0.700000 0.966667 0.933333 0.600000 0.600000 0.200000 0.300000 0.166667 0.100000
3 0.000000 0.033333 0.000000 0.233333 0.366667 0.000000 0.033333 0.133333 0.000000
5 base 0 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645
1 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971
2 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722
3 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517
4 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143
5 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001
perf 0 0.000000 0.000000 0.000000 0.000000 0.000000 0.133333 0.233333 0.400000 0.366667
1 0.100000 0.000000 0.266667 0.166667 0.000000 0.166667 0.333333 0.166667 0.300000
2 0.300000 0.000000 0.100000 0.266667 0.066667 0.500000 0.366667 0.300000 0.333333
3 0.400000 0.100000 0.433333 0.500000 0.400000 0.166667 0.066667 0.133333 0.000000
4 0.200000 0.900000 0.200000 0.066667 0.466667 0.033333 0.000000 0.000000 0.000000
5 0.000000 0.000000 0.000000 0.000000 0.066667 0.000000 0.000000 0.000000 0.000000

116 rows × 9 columns


In [7]:
df_rea


Out[7]:
method txt_comp_dist
feature readability
metric euclidean
norm_dir bbs152930 phy17301 mus1139
oot_dir bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008
num_norm num_oot num_top result k
10 1 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.966667 0.966667 1.000000 0.933333 0.800000 0.933333 0.933333 0.966667 1.000000
1 0.033333 0.033333 0.000000 0.066667 0.200000 0.066667 0.066667 0.033333 0.000000
3 base 0 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273
1 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727 0.272727
perf 0 0.633333 0.333333 0.433333 0.666667 0.300000 0.700000 0.900000 0.833333 0.933333
1 0.366667 0.666667 0.566667 0.333333 0.700000 0.300000 0.100000 0.166667 0.066667
5 base 0 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455 0.545455
1 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545 0.454545
perf 0 0.500000 0.233333 0.500000 0.233333 0.033333 0.166667 0.900000 0.633333 0.866667
1 0.500000 0.766667 0.500000 0.766667 0.966667 0.833333 0.100000 0.366667 0.133333
4 1 base 0 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286 0.714286
1 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714 0.285714
perf 0 0.833333 0.900000 0.966667 0.733333 0.633333 0.800000 0.733333 0.833333 0.933333
1 0.166667 0.100000 0.033333 0.266667 0.366667 0.200000 0.266667 0.166667 0.066667
3 base 0 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670 0.329670
1 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505 0.494505
2 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835 0.164835
3 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989 0.010989
perf 0 0.300000 0.000000 0.133333 0.033333 0.000000 0.266667 0.700000 0.666667 0.700000
1 0.466667 0.366667 0.700000 0.666667 0.366667 0.500000 0.300000 0.266667 0.300000
2 0.233333 0.633333 0.166667 0.300000 0.633333 0.233333 0.000000 0.066667 0.000000
3 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
5 base 0 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874 0.125874
1 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580 0.419580
2 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640 0.359640
3 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910 0.089910
4 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995 0.004995
perf 0 0.100000 0.000000 0.266667 0.000000 0.000000 0.133333 0.500000 0.166667 0.500000
... ... ... ... ... ... ... ... ... ... ... ... ... ...
80 4 5 base 4 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003 0.000003
perf 0 0.933333 0.933333 0.933333 0.733333 0.366667 0.700000 0.733333 0.833333 0.800000
1 0.066667 0.066667 0.066667 0.233333 0.533333 0.300000 0.233333 0.166667 0.200000
2 0.000000 0.000000 0.000000 0.033333 0.066667 0.000000 0.033333 0.000000 0.000000
3 0.000000 0.000000 0.000000 0.000000 0.033333 0.000000 0.000000 0.000000 0.000000
4 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
8 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.933333 1.000000 0.966667 0.833333 0.766667 0.933333 0.700000 1.000000 0.966667
1 0.066667 0.000000 0.033333 0.166667 0.233333 0.066667 0.300000 0.000000 0.033333
3 base 0 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706 0.748706
1 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371 0.230371
2 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413 0.020413
3 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510 0.000510
perf 0 0.900000 1.000000 0.900000 0.366667 0.166667 0.800000 0.766667 1.000000 0.866667
1 0.100000 0.000000 0.100000 0.533333 0.333333 0.200000 0.233333 0.000000 0.133333
2 0.000000 0.000000 0.000000 0.100000 0.500000 0.000000 0.000000 0.000000 0.000000
3 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
5 base 0 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645 0.613645
1 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971 0.322971
2 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722 0.058722
3 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517 0.004517
4 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143 0.000143
5 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001 0.000001
perf 0 0.966667 0.933333 0.966667 0.533333 0.066667 0.600000 0.633333 0.600000 0.933333
1 0.033333 0.066667 0.033333 0.433333 0.300000 0.400000 0.366667 0.400000 0.066667
2 0.000000 0.000000 0.000000 0.033333 0.500000 0.000000 0.000000 0.000000 0.000000
3 0.000000 0.000000 0.000000 0.000000 0.100000 0.000000 0.000000 0.000000 0.000000
4 0.000000 0.000000 0.000000 0.000000 0.033333 0.000000 0.000000 0.000000 0.000000
5 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

116 rows × 9 columns

Now we already have the same index for the two DataFrames, so we can safely join them into one.


In [8]:
df = df_uni.join(df_rea)
df.head()


Out[8]:
method txt_comp_dist
feature unigram readability
metric euclidean euclidean
norm_dir bbs152930 phy17301 mus1139 bbs152930 phy17301 mus1139
oot_dir bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008
num_norm num_oot num_top result k
10 1 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.266667 0.000000 0.200000 0.066667 0.000000 0.366667 0.066667 0.466667 0.300000 0.966667 0.966667 1.000000 0.933333 0.800000 0.933333 0.933333 0.966667 1.000000
1 0.733333 1.000000 0.800000 0.933333 1.000000 0.633333 0.933333 0.533333 0.700000 0.033333 0.033333 0.000000 0.066667 0.200000 0.066667 0.066667 0.033333 0.000000
3 base 0 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273

The table is very large, so that was the truncated version. Now, let's reorder the column levels to make it prettier.


In [9]:
df = df.reorder_levels(['method', 'metric', 'feature', 'norm_dir', 'oot_dir'], axis=1)
df.head()


Out[9]:
method txt_comp_dist
metric euclidean
feature unigram readability
norm_dir bbs152930 phy17301 mus1139 bbs152930 phy17301 mus1139
oot_dir bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008 bbs57549 mus10142 phy40008
num_norm num_oot num_top result k
10 1 1 base 0 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091 0.909091
1 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909 0.090909
perf 0 0.266667 0.000000 0.200000 0.066667 0.000000 0.366667 0.066667 0.466667 0.300000 0.966667 0.966667 1.000000 0.933333 0.800000 0.933333 0.933333 0.966667 1.000000
1 0.733333 1.000000 0.800000 0.933333 1.000000 0.633333 0.933333 0.533333 0.700000 0.033333 0.033333 0.000000 0.066667 0.200000 0.066667 0.066667 0.033333 0.000000
3 base 0 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273 0.727273

Great. Let's aggregate the result by averaging over all threads. We would like to see how well each feature performs.


In [10]:
df2 = df.groupby(axis=1, level=['method', 'metric', 'feature']).mean()
df2


Out[10]:
method txt_comp_dist
metric euclidean
feature readability unigram
num_norm num_oot num_top result k
10 1 1 base 0 0.909091 0.909091
1 0.090909 0.090909
perf 0 0.944444 0.192593
1 0.055556 0.807407
3 base 0 0.727273 0.727273
1 0.272727 0.272727
perf 0 0.637037 0.100000
1 0.362963 0.900000
5 base 0 0.545455 0.545455
1 0.454545 0.454545
perf 0 0.451852 0.051852
1 0.548148 0.948148
4 1 base 0 0.714286 0.714286
1 0.285714 0.285714
perf 0 0.818519 0.133333
1 0.181481 0.866667
3 base 0 0.329670 0.329670
1 0.494505 0.494505
2 0.164835 0.164835
3 0.010989 0.010989
perf 0 0.311111 0.092593
1 0.437037 0.229630
2 0.251852 0.255556
3 0.000000 0.422222
5 base 0 0.125874 0.125874
1 0.419580 0.419580
2 0.359640 0.359640
3 0.089910 0.089910
4 0.004995 0.004995
perf 0 0.185185 0.011111
... ... ... ... ... ... ...
80 4 5 base 4 0.000003 0.000003
perf 0 0.774074 0.196296
1 0.207407 0.229630
2 0.014815 0.285185
3 0.003704 0.214815
4 0.000000 0.074074
8 1 base 0 0.909091 0.909091
1 0.090909 0.090909
perf 0 0.900000 0.537037
1 0.100000 0.462963
3 base 0 0.748706 0.748706
1 0.230371 0.230371
2 0.020413 0.020413
3 0.000510 0.000510
perf 0 0.751852 0.133333
1 0.181481 0.270370
2 0.066667 0.507407
3 0.000000 0.088889
5 base 0 0.613645 0.613645
1 0.322971 0.322971
2 0.058722 0.058722
3 0.004517 0.004517
4 0.000143 0.000143
5 0.000001 0.000001
perf 0 0.692593 0.125926
1 0.233333 0.166667
2 0.059259 0.248148
3 0.011111 0.244444
4 0.003704 0.207407
5 0.000000 0.007407

116 rows × 2 columns

This is pretty much the summary of our result. Let's plot it so we can see clearly the distribution.


In [11]:
df3 = df2.unstack(level='result')
df3


Out[11]:
method txt_comp_dist
metric euclidean
feature readability unigram
result base perf base perf
num_norm num_oot num_top k
10 1 1 0 0.909091 0.944444 0.909091 0.192593
1 0.090909 0.055556 0.090909 0.807407
3 0 0.727273 0.637037 0.727273 0.100000
1 0.272727 0.362963 0.272727 0.900000
5 0 0.545455 0.451852 0.545455 0.051852
1 0.454545 0.548148 0.454545 0.948148
4 1 0 0.714286 0.818519 0.714286 0.133333
1 0.285714 0.181481 0.285714 0.866667
3 0 0.329670 0.311111 0.329670 0.092593
1 0.494505 0.437037 0.494505 0.229630
2 0.164835 0.251852 0.164835 0.255556
3 0.010989 0.000000 0.010989 0.422222
5 0 0.125874 0.185185 0.125874 0.011111
1 0.419580 0.370370 0.419580 0.137037
2 0.359640 0.281481 0.359640 0.225926
3 0.089910 0.148148 0.089910 0.300000
4 0.004995 0.014815 0.004995 0.325926
8 1 0 0.555556 0.696296 0.555556 0.100000
1 0.444444 0.303704 0.444444 0.900000
3 0 0.147059 0.207407 0.147059 0.033333
1 0.441176 0.311111 0.441176 0.200000
2 0.343137 0.470370 0.343137 0.333333
3 0.068627 0.011111 0.068627 0.433333
5 0 0.029412 0.092593 0.029412 0.011111
1 0.196078 0.229630 0.196078 0.088889
2 0.392157 0.266667 0.392157 0.162963
3 0.294118 0.259259 0.294118 0.333333
4 0.081699 0.151852 0.081699 0.259259
5 0.006536 0.000000 0.006536 0.144444
80 1 1 0 0.987654 0.988889 0.987654 0.844444
1 0.012346 0.011111 0.012346 0.155556
3 0 0.962963 0.959259 0.962963 0.507407
1 0.037037 0.040741 0.037037 0.492593
5 0 0.938272 0.955556 0.938272 0.470370
1 0.061728 0.044444 0.061728 0.529630
4 1 0 0.952381 0.944444 0.952381 0.637037
1 0.047619 0.055556 0.047619 0.362963
3 0 0.862264 0.825926 0.862264 0.240741
1 0.132656 0.155556 0.132656 0.411111
2 0.005038 0.018519 0.005038 0.325926
3 0.000042 0.000000 0.000042 0.022222
5 0 0.778699 0.774074 0.778699 0.196296
1 0.204921 0.207407 0.204921 0.229630
2 0.015968 0.014815 0.015968 0.285185
3 0.000409 0.003704 0.000409 0.214815
4 0.000003 0.000000 0.000003 0.074074
8 1 0 0.909091 0.900000 0.909091 0.537037
1 0.090909 0.100000 0.090909 0.462963
3 0 0.748706 0.751852 0.748706 0.133333
1 0.230371 0.181481 0.230371 0.270370
2 0.020413 0.066667 0.020413 0.507407
3 0.000510 0.000000 0.000510 0.088889
5 0 0.613645 0.692593 0.613645 0.125926
1 0.322971 0.233333 0.322971 0.166667
2 0.058722 0.059259 0.058722 0.248148
3 0.004517 0.011111 0.004517 0.244444
4 0.000143 0.003704 0.000143 0.207407
5 0.000001 0.000000 0.000001 0.007407

We see that for each feature, the baseline is the same so let's remove it.


In [12]:
df4 = df3.T.drop_duplicates().T
df4


Out[12]:
method txt_comp_dist
metric euclidean
feature readability unigram
result base perf perf
num_norm num_oot num_top k
10 1 1 0 0.909091 0.944444 0.192593
1 0.090909 0.055556 0.807407
3 0 0.727273 0.637037 0.100000
1 0.272727 0.362963 0.900000
5 0 0.545455 0.451852 0.051852
1 0.454545 0.548148 0.948148
4 1 0 0.714286 0.818519 0.133333
1 0.285714 0.181481 0.866667
3 0 0.329670 0.311111 0.092593
1 0.494505 0.437037 0.229630
2 0.164835 0.251852 0.255556
3 0.010989 0.000000 0.422222
5 0 0.125874 0.185185 0.011111
1 0.419580 0.370370 0.137037
2 0.359640 0.281481 0.225926
3 0.089910 0.148148 0.300000
4 0.004995 0.014815 0.325926
8 1 0 0.555556 0.696296 0.100000
1 0.444444 0.303704 0.900000
3 0 0.147059 0.207407 0.033333
1 0.441176 0.311111 0.200000
2 0.343137 0.470370 0.333333
3 0.068627 0.011111 0.433333
5 0 0.029412 0.092593 0.011111
1 0.196078 0.229630 0.088889
2 0.392157 0.266667 0.162963
3 0.294118 0.259259 0.333333
4 0.081699 0.151852 0.259259
5 0.006536 0.000000 0.144444
80 1 1 0 0.987654 0.988889 0.844444
1 0.012346 0.011111 0.155556
3 0 0.962963 0.959259 0.507407
1 0.037037 0.040741 0.492593
5 0 0.938272 0.955556 0.470370
1 0.061728 0.044444 0.529630
4 1 0 0.952381 0.944444 0.637037
1 0.047619 0.055556 0.362963
3 0 0.862264 0.825926 0.240741
1 0.132656 0.155556 0.411111
2 0.005038 0.018519 0.325926
3 0.000042 0.000000 0.022222
5 0 0.778699 0.774074 0.196296
1 0.204921 0.207407 0.229630
2 0.015968 0.014815 0.285185
3 0.000409 0.003704 0.214815
4 0.000003 0.000000 0.074074
8 1 0 0.909091 0.900000 0.537037
1 0.090909 0.100000 0.462963
3 0 0.748706 0.751852 0.133333
1 0.230371 0.181481 0.270370
2 0.020413 0.066667 0.507407
3 0.000510 0.000000 0.088889
5 0 0.613645 0.692593 0.125926
1 0.322971 0.233333 0.166667
2 0.058722 0.059259 0.248148
3 0.004517 0.011111 0.244444
4 0.000143 0.003704 0.207407
5 0.000001 0.000000 0.007407

Okay, now the data is ready to be plot! We will group each plot by the random event, i.e. num_norm, num_oot, and num_top.

Here is the version with the legend displayed.


In [13]:
grouped = df4.groupby(level=['num_norm', 'num_oot', 'num_top'])
for name, group in grouped:
    group.plot(kind='bar', ylim=(0.,2.), use_index=False, title='num_norm={}, num_oot={}, num_top={}'.format(*name))


The legend is kind of annoying so let's just remove it. Remember that blue, green, and red represents the baseline, readability features, and unigram features respectively.


In [14]:
for name, group in grouped:
    group.plot(kind='bar', ylim=(0.,1.), legend=False, use_index=False, title='num_norm={}, num_oot={}, num_top={}'.format(*name))


Now it is easier to compare the three of them. Unigram features is the winner here though the performance is still bad. For instance, take a look the case where the number of normal and OOT posts are 80 and 4 respectively and we have 5 posts in top list. The probability of finding zero or only one OOT post in the top list is still high. We expect that, with the large number of normal posts, it will be easier to detect the OOT posts. But this is not the case. We need to improve on this.

Lastly, we will compare their expected values for each random event.


In [15]:
gr = df3.groupby(level=['num_norm', 'num_oot', 'num_top'])
ngroup = len(gr)
data = np.empty((ngroup, 3))
index = []
for i, (name, _) in enumerate(grouped):
    tmp = df3.loc[name]
    prod = tmp.T * np.array(tmp.index)   # multiply pmf and support
    prod = prod.unstack(level='result')
    expval = prod.sum(axis=1, level='result')
    expval = expval.unstack(level='feature').drop(('base', 'readability'), axis=1).values.ravel()
    data[i,:] = expval
    index.append(name)

In [16]:
data


Out[16]:
array([[ 0.09090909,  0.05555556,  0.80740741],
       [ 0.27272727,  0.36296296,  0.9       ],
       [ 0.45454545,  0.54814815,  0.94814815],
       [ 0.28571429,  0.18148148,  0.86666667],
       [ 0.85714286,  0.94074074,  2.00740741],
       [ 1.42857143,  1.43703704,  2.79259259],
       [ 0.44444444,  0.3037037 ,  0.9       ],
       [ 1.33333333,  1.28518519,  2.16666667],
       [ 2.22222222,  2.14814815,  3.17407407],
       [ 0.01234568,  0.01111111,  0.15555556],
       [ 0.03703704,  0.04074074,  0.49259259],
       [ 0.0617284 ,  0.04444444,  0.52962963],
       [ 0.04761905,  0.05555556,  0.36296296],
       [ 0.14285714,  0.19259259,  1.12962963],
       [ 0.23809524,  0.24814815,  1.74074074],
       [ 0.09090909,  0.1       ,  0.46296296],
       [ 0.27272727,  0.31481481,  1.55185185],
       [ 0.45454545,  0.4       ,  2.26296296]])

In [17]:
index = pd.MultiIndex.from_tuples(index, names=['num_norm', 'num_oot', 'num_top'])
columns = pd.MultiIndex.from_tuples([('E[X]', 'base'), ('E[X]', 'readability'), ('E[X]', 'unigram')])

In [18]:
result = pd.DataFrame(data, index=index, columns=columns)
result


Out[18]:
E[X]
base readability unigram
num_norm num_oot num_top
10 1 1 0.090909 0.055556 0.807407
3 0.272727 0.362963 0.900000
5 0.454545 0.548148 0.948148
4 1 0.285714 0.181481 0.866667
3 0.857143 0.940741 2.007407
5 1.428571 1.437037 2.792593
8 1 0.444444 0.303704 0.900000
3 1.333333 1.285185 2.166667
5 2.222222 2.148148 3.174074
80 1 1 0.012346 0.011111 0.155556
3 0.037037 0.040741 0.492593
5 0.061728 0.044444 0.529630
4 1 0.047619 0.055556 0.362963
3 0.142857 0.192593 1.129630
5 0.238095 0.248148 1.740741
8 1 0.090909 0.100000 0.462963
3 0.272727 0.314815 1.551852
5 0.454545 0.400000 2.262963

Done! From the table it is obvious that unigram features outperforms both baseline and readability features.