Browse Source

add feature

jch 2 days ago
parent
commit
24af0390c6

+ 14 - 14
src/main/scala/com/aliyun/odps/spark/examples/myUtils/FeatureTransformV2.java

@@ -8,7 +8,7 @@ public class FeatureTransformV2 {
     private static final int seqMaxN = 2;
     private static final int seqLastN = 2;
     private static final double smoothPlus = 5.0;
-    private static final double largerSmoothPlus = 500.0;
+    private static final double largerSmoothPlus = 100.0;
     private static final double log1Scale = 10.0;
     private static final List<String> c1Periods = Arrays.asList("72h", "168h");
     private static final List<String> b0Periods = Arrays.asList("1h", "3h", "6h", "12h");
@@ -409,10 +409,10 @@ public class FeatureTransformV2 {
             double ros_minus = FeatureUtils.plusSmooth(return_n_uv, is_return_1, smoothPlus);
 
             // larger smooth
-            double l_rovn = FeatureUtils.plusSmooth(return_n_uv, exp, largerSmoothPlus);
-            double l_ros = FeatureUtils.plusSmooth(return_n_uv, is_share, largerSmoothPlus);
-            double l_ros_n = FeatureUtils.plusSmooth(return_n_uv, share_cnt, largerSmoothPlus);
-            double l_ros_minus = FeatureUtils.plusSmooth(return_n_uv, is_return_1, largerSmoothPlus);
+            double l_rovn = FeatureUtils.plusSmooth(return_n_uv, exp, largerSmoothPlus, 1);
+            double l_ros = FeatureUtils.plusSmooth(return_n_uv, is_share, largerSmoothPlus, 1);
+            double l_ros_n = FeatureUtils.plusSmooth(return_n_uv, share_cnt, largerSmoothPlus, 1);
+            double l_ros_minus = FeatureUtils.plusSmooth(return_n_uv, is_return_1, largerSmoothPlus, 1);
 
             featMap.put(prefix + "_" + period + "@" + "exp", exp_s);
             featMap.put(prefix + "_" + period + "@" + "is_share", is_share_s);
@@ -472,15 +472,15 @@ public class FeatureTransformV2 {
             double ros_minus = FeatureUtils.plusSmooth(return_n_uv, is_return_1, smoothPlus);
 
             // larger smooth
-            double l_rovn1 = FeatureUtils.plusSmooth(return_1_uv, exp, largerSmoothPlus);
-            double l_ros1 = FeatureUtils.plusSmooth(return_1_uv, is_share, largerSmoothPlus);
-            double l_ros_n1 = FeatureUtils.plusSmooth(return_1_uv, share_cnt, largerSmoothPlus);
-            double l_ros_minus1 = FeatureUtils.plusSmooth(return_1_uv, is_return_1, largerSmoothPlus);
-
-            double l_rovn = FeatureUtils.plusSmooth(return_n_uv, exp, largerSmoothPlus);
-            double l_ros = FeatureUtils.plusSmooth(return_n_uv, is_share, largerSmoothPlus);
-            double l_ros_n = FeatureUtils.plusSmooth(return_n_uv, share_cnt, largerSmoothPlus);
-            double l_ros_minus = FeatureUtils.plusSmooth(return_n_uv, is_return_1, largerSmoothPlus);
+            double l_rovn1 = FeatureUtils.plusSmooth(return_1_uv, exp, largerSmoothPlus, 1);
+            double l_ros1 = FeatureUtils.plusSmooth(return_1_uv, is_share, largerSmoothPlus, 1);
+            double l_ros_n1 = FeatureUtils.plusSmooth(return_1_uv, share_cnt, largerSmoothPlus, 1);
+            double l_ros_minus1 = FeatureUtils.plusSmooth(return_1_uv, is_return_1, largerSmoothPlus, 1);
+
+            double l_rovn = FeatureUtils.plusSmooth(return_n_uv, exp, largerSmoothPlus, 1);
+            double l_ros = FeatureUtils.plusSmooth(return_n_uv, is_share, largerSmoothPlus, 1);
+            double l_ros_n = FeatureUtils.plusSmooth(return_n_uv, share_cnt, largerSmoothPlus, 1);
+            double l_ros_minus = FeatureUtils.plusSmooth(return_n_uv, is_return_1, largerSmoothPlus, 1);
 
             featMap.put(prefix + "_" + period + "@" + "exp", exp_s);
             featMap.put(prefix + "_" + period + "@" + "is_share", is_share_s);

+ 11 - 0
src/main/scala/com/aliyun/odps/spark/examples/myUtils/FeatureUtils.java

@@ -77,6 +77,17 @@ public class FeatureUtils {
         return a / (b + plus);
     }
 
+    public static double plusSmooth(double a, double b, double plus, double upper) {
+        if (a == 0 || b == 0) {
+            return 0D;
+        }
+        double value = a / (b + plus);
+        if (value > upper) {
+            value = upper + Math.log(value - upper + 1) / 10;
+        }
+        return value;
+    }
+
     public static double wilsonScore(double click, double exposure) {
         if (exposure <= 0) {
             return 0.0;