Application Center - Maplesoft

App Preview:

Determining the Popularity of Applications

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


Automatic Ranking of Application Popularity 

? Maplesoft, a division of Waterloo Maple Inc., 2009 




One of the changes that we made when designing a new Application Center was to give each application an overall rating of popularity. This rating is based off a variety of different factors, and below you will see how these factors come together to generate the overall rating 


Inside the Ranking Methodology 

We wish to rank documents based on the following parameters: 



  • v - Number of views



  • d - Number of file downloads



  • a - Average ranking



  • nr - Number of rankings



  • days - Number of days the document has been published


We also know the following constant: 


  • m - Maximum ranking



The number of views should be less signifigant than the number of downloads since the action of a user downloading the file indicates the user is interested in the file. Viewing the document only means the document appeared highly in search results. 


We will divide both the number of views and the number of downloads of the document to determine the number of downloads/views per day. Also divide views by 2 to reduce it's effect on the ranking. 


`+`(`*`(v, `*`(`/`(`+`(`*`(2, `*`(days)))))), `/`(`*`(d), `*`(days))) 

`+`(`/`(`*`(`/`(1, 2), `*`(v)), `*`(days)), `/`(`*`(d), `*`(days))) (2.1)


We also want the ranking of the document to signfigantly affect the score for the document. However, we also want the number of times the document was rated to increase the amount that the rating affects the score. 


Most documents are rated about 5 times, most are rated less than 10 times. Let's create a function that gives a y value of 0..1 with an asymptote at 1 when x = 10 

`/`(`*`(x), `*`(`+`(x, 1))) 

`/`(`*`(x), `*`(`+`(x, 1))) (2.2)

plot(`/`(`*`(x), `*`(`+`(x, 1))), x = 0 .. 10) 


For this function, was denoted by the number of rankings , so we make that substitution: 

subs(x = nr, `/`(`*`(x), `*`(`+`(x, 1)))) 

`/`(`*`(nr), `*`(`+`(nr, 1))) (2.3)



Have the value of the ranking be more effective when the number of rankings reaches 10 using our function: 

`+`(`*`(`/`(1, 2), `+`(1, `-`(`/`(`*`(nr), `*`(`+`(nr, 1)))))), `/`(`*`(a, `*`(nr)), `*`(m, `*`(`+`(nr, 1))))) 

`+`(`/`(1, 2), `-`(`/`(`*`(`/`(1, 2), `*`(nr)), `*`(`+`(nr, 1)))), `/`(`*`(`/`(1, 5), `*`(a, `*`(nr))), `*`(`+`(nr, 1)))) (2.4)


`+`(`/`(`*`(`/`(1, 10), `*`(`+`(5, `*`(2, `*`(a, `*`(nr)))))), `*`(`+`(nr, 1)))) (2.5)


Let's put it all together 

`+`(`/`(`*`(`/`(1, 10), `*`(`+`(`/`(`*`(`/`(1, 2), `*`(v)), `*`(days)), `/`(`*`(d), `*`(days))), `*`(`+`(5, `*`(2, `*`(a, `*`(nr))))))), `*`(`+`(nr, 1)))) 

`+`(`/`(`*`(`/`(1, 10), `*`(`+`(`/`(`*`(`/`(1, 2), `*`(v)), `*`(days)), `/`(`*`(d), `*`(days))), `*`(`+`(5, `*`(2, `*`(a, `*`(nr))))))), `*`(`+`(nr, 1)))) (2.6)


`+`(`/`(`*`(`/`(1, 20), `*`(`+`(v, `*`(2, `*`(d))), `*`(`+`(5, `*`(2, `*`(a, `*`(nr))))))), `*`(days, `*`(`+`(nr, 1))))) (2.7)

Set the max ranking to be 5 

`assign`(m, 5) 

5 (2.8)

`+`(`/`(`*`(`/`(1, 20), `*`(`+`(v, `*`(2, `*`(d))), `*`(`+`(5, `*`(2, `*`(a, `*`(nr))))))), `*`(days, `*`(`+`(nr, 1))))) 

`+`(`/`(`*`(`/`(1, 20), `*`(`+`(v, `*`(2, `*`(d))), `*`(`+`(5, `*`(2, `*`(a, `*`(nr))))))), `*`(days, `*`(`+`(nr, 1))))) (2.9)


Let's test the function using embedded components. Before using the sliders, we first execute the procedure contained in the next subsection. Expand the subsection to see the code and initialize it. 


Update Procedure 


v - Number of Views 

Embedded component 

d - Number of Downloads 

Embedded component 

days - Number of days 

Embedded component 

a - Average Ranking 

Embedded component 

nr - Number of Rankings 

Embedded component 

Views/Downloads Part 

Embedded component 

Rating Part 

Embedded component 


Embedded component 


Legal Notice: ? Maplesoft, a division of Waterloo Maple Inc. 2009. Maplesoft and Maple are trademarks of Waterloo Maple Inc. This application may contain errors and Maplesoft is not liable for any damages resulting from the use of this material. This application is intended for non-commercial, non-profit use only. Contact Maplesoft for permission if you wish to use this application in for-profit activities.