anchor.diff:  //0.48737 = kaggle rsme; oobrmserror = 0.4776784128; rmserror = 0.4303968628
   //? = kaggle rsme; oobrmserror = 0.4147019175; rmserror = 0.3529753185
   //0.48371 = kaggle rsme; RDF RMS Error: 0.451875; Out-of-bag RMS Error: 0.475592
  +//0.47806 = kaggle rsme; RDF RMS Error: 0.446892; Out-of-bag RMS Error: 0.470399
  
positive.code:     let indices = uniqueWords |> Seq.map (fun w -> titleWords |> Seq.tryFindIndexBack (isMatch w)) |> Seq.choose id
      let queryTitleIndices = indices |> Seq.map (fun i -> float i / float titleWords.Length) |> Array.ofSeq
      let queryTitlePosScore = if Array.isEmpty queryTitleIndices then 0. else Seq.average queryTitleIndices
      let attributes = attrSelector sample.ProductId
      let desc = sample.Description |> fixLineConcats attributes
      let deduped = attributes |> Seq.where (fun a -> a |> containedIn desc |> not) |> String.concat " "
      let titleMatches = uniqueWords |> Array.filter (isMatch title)
      let descMatches = uniqueWords |> Array.filter (isMatch desc)
      let attrMatches = uniqueWords |> Array.filter (isMatch deduped)
  
negative.code: 
  let fixLineConcats (attribs:string seq) (desc:string) =
      attribs
      |> Seq.where (String.IsNullOrWhiteSpace >> not)
      |> Seq.fold
          (fun (state:StringBuilder) t -> state.Replace(t, t + " "))
          (StringBuilder(desc))
      |> string
  
  let attributesConcat attribs =
      let getAttrStr name (value:string) =
          match value.ToLowerInvariant() with
          | "yes" -> name // if true attrib, include attrib name
          | "no"  -> String.Empty
          | _     ->
            match value with
            | b when b.StartsWith "Bullet" -> value
            | _ -> name + " " + value
      attribs
      |> Seq.map (fun (k,v) -> getAttrStr k v)
  
  let attributeNames (attribs:(string * string) seq) =
      attribs |> Seq.where (fun (k,_) -> k.StartsWith "Bullet" |> not) |> Seq.map fst
  
  let features attrSelector productBrand (sample:CsvData.Sample) =
      let words = sample.Query
  