Architecture

When we thought about how the components on our site would interact with each other, we wanted to make sure we would plan and uncover problems early in the process. We created some diagrams to help us better understand how, for example, information would be written, read, and stored in our system. Also, since the recommender system is an important feature on our site, one of our biggest priorities is to ensure that this part works properly. Below are a few diagrams that show our brainstorming process, and the resulting graphics that help illustrate some key overarching features and how they relate to the technologies we’re using.


Overall, our PHP server will handle the information we need to store and retrieve from the database. Furthermore, it will also process the XML that we will be sending to Directed Edge to calculate recommended and related items for our recommender system. Finally, the PHP server will output personalized information into our HTML template to dynamically make the web pages.

Future Challenges

  • IMAGE STORAGE—Given that our system definitely depends on images to be an effective interface and resource, we will be dealing with a lot of files. We can’t really store the binary of the images in an actual database without creating some serious tradeoffs. Our plan is to store the images in files on our server and just store the direct links in our database that refer to them. In future iterations when we envision many users, this will likely become a bottleneck. As a result, we would need to distribute the files over a number of servers and/or find other ways to cache the images.
  • RELIANCE ON DIRECTED EDGE—With the scope of our project, we hope Directed Edge will help alleviate some of the burden of creating quality recommendations easily and quickly. However, we recognize this is a definite cost in relying on another resource to make your system work. If Directed Edge goes down, we are in trouble! One thing we have considered is to only make updates periodically and store the previously-updated data locally to ensure we still provide information to the user.

Recommender system

At this point we have chosen to use Directed Edge as our recommender system solution. As mentioned above, we recognize this could potentially create some bottleneck issues by depending on their service. We hope the effectiveness of DE is worth the cost initially, when the user population is small and manageable through this method. We will send the relevant data from our database in XML format to the Directed Edge servers, which will store it in a database on their end, make the calculations, and return recommendations when they are requested through API queries. These are also returned in XML.

DirectedEdge basics

  • Directed Edge uses graph-based recommendations rather than item-based or user-based
  • In their model, everything – users and products – are items.
  • Recommendations are based on the links between items. By looking at how strongly a user is connected to items within their neighborhood, it guesses what they might be interested in

Demographic data issues

  • Items can have tags or properties. Currently these aren’t taken into in generating recommendations, although we can the information to filter results.
  • Can we still integrate demographic data? Maybe(?), by treating demographic attributes like items themselves.

Types of links

  • Right now links in DirectedEdge are directed (like Twitter followers) and can be weighted (like a rating), but cannot distinguish between different types of links.
  • This might be an issue for us, because we potentially have three different types of links from users to products: bookmarked, rated on a star scale, and preferred in the “hot or not” comparison.
  • We could possibly deal with this treating each of these things as a number of points that can be added to the weight between a single link.
    Prefers = 2 points
    Bookmarks = 5 points
    Rates = whatever the user rates it out of 5
    So if a user rates and bookmarks an item, it simply strengthens the weight of the link.

References:
Directed Edge Developer Base

Next steps: We have started prioritizing initial implementation work and splitting up tasks:

  • Natalia has made progress scraping data to “bootstrap” our system from the ShopStyle API so that we can get a lot of items quickly.
  • Natalia & Mike are working to get Directed Edge to return recommendations, then plug actual values from our database in to get the recommender working!
  • Kerry has tested our lo-fi prototype and we have found some very helpful feedback and things we need to change, and we have done so early in the implementation process. She is also working on beginning the HTML prototypes.
  • Kate has been working on login, sessions, and creating the database framework to put data into.