Оценка = нижняя граница доверительного интервала оценки Вильсона для параметра Бернулли в MongoDB - PullRequest
1 голос
/ 25 апреля 2019

У меня есть документы с количеством положительных и всего отзывов.Как рассчитать оценки, используя « нижнюю границу доверительного интервала оценок Вильсона для параметра Бернулли », объясненное в «Как не сортировать по средней оценке» ?

Ниже, вот так выглядит текущий документ:

{
  "name": "Hotel A",
  "positive_reviews": 2,
  "negative_reviews": 1,
  "total_reviews": 3
},{
  "name": "Hotel B",
  "positive_reviews": 3,
  "negative_reviews": 3,
  "total_reviews": 6
}

Я ожидаю, что после вычисления получится следующий вывод:

{
  "name": "Hotel A",
  "positive_reviews": 2,
  "negative_reviews": 1,
  "total_reviews": 3
   "scores": 0.34
},{
  "name": "Hotel B",
  "positive_reviews": 3,
  "negative_reviews": 3,
  "total_reviews": 6
  "scores": 0,19
}

1 Ответ

1 голос
/ 25 апреля 2019

Я применил формулу, как показано ниже:

((positive + 1.9208) / (positive + negative) - 
                   1.96 * SQRT((positive * negative) / (positive + negative) + 0.9604) / 
                          (positive + negative)) / (1 + 3.8416 / (positive + negative))

Вот запрос MongoDB:

db.collection.aggregate([
    {
        $project: {
        name:1,
        positive_reviews:1,
        negative_reviews:1,
        total_reviews:1,
            scores: {
                $divide: [
                        {
                            $subtract: [
                                    {
                                        $divide: [
                                            { $add: ["$positive_reviews",1.9208] },
                                            { $add: ["$positive_reviews","$negative_reviews"] }
                                        ],
                                    },
                                    {
                                        $multiply: [
                                            1.96,
                                            {
                                                $divide: [ 
                                                    { 
                                                        $sqrt: { 
                                                            $add: [
                                                                { 
                                                                    $divide: [ 
                                                                        {
                                                                            $multiply: ["$positive_reviews","$negative_reviews"] 
                                                                        }, 
                                                                        {   
                                                                            $add: ["$positive_reviews","$negative_reviews"]
                                                                        } 
                                                                    ] 
                                                                },
                                                                0.9604
                                                            ]
                                                        }
                                                    },
                                                    {   
                                                        $add: ["$positive_reviews","$negative_reviews"]
                                                    }
                                                ]
                                            }
                                        ]
                                    },
                            ]
                        },
                        {
                            $add: [
                                {
                                    $divide: [ 3.8416, {$add: ["$positive_reviews","$negative_reviews"]}  ]
                                },
                                1
                            ]
                        }
                ]
            },
        }
    }
  ])

Мои результаты следующие:

/* 1 createdAt:26/04/2019, 00:16:16*/
{
    "_id" : ObjectId("5cc200785d13d8232aff6e98"),
    "name" : "Hotel A",
    "positive_reviews" : 2,
    "negative_reviews" : 1,
    "total_reviews" : 3,
    "scores" : 0.20765495512648788
},

/* 2 createdAt:26/04/2019, 00:16:16*/
{
    "_id" : ObjectId("5cc200785d13d8232aff6e99"),
    "name" : "Hotel B",
    "positive_reviews" : 3,
    "negative_reviews" : 3,
    "total_reviews" : 6,
    "scores" : 0.18761280689940865
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...