in core/src/main/scala/com/spotify/featran/transformers/MDL.scala [134:150]
override def prepare(input: MDLRecord[T]): B[T] =
if (rng.nextDouble() < sampleRate) ArraySeq(input) else ArraySeq.empty[MDLRecord[T]]
override def semigroup: Semigroup[B[T]] = _ ++ _
override def present(reduction: B[T]): C = {
val ranges = new MDLPDiscretizer[T](
reduction.iterator.map(l => (l.label, l.value)).toSeq,
stoppingCriterion,
minBinPercentage
).discretize(maxBins)
val m = new C()
ranges.tail.zipWithIndex.map { case (v, i) => m.put(v, i) }
m
}