How does the Tinkoff Internship program work?

Hello! We are participants in the Tinkoff Internship program, and in this article we want to talk about selection, the internal situation, tasks and our impressions. We hope this will be useful for future interns and those who are simply interested in the company.



image



Selection



The selection for the Tinkoff Internship program took place in two stages.



The first part is online exams. Depending on the direction, several algorithmic problems are offered, a test for knowledge of SQL or olympiad problems in mathematics, as well as a test application for those guys who apply for mobile development. Entrance tests are not entirely standard and require some preparation. After the expiration of the exams, the conditions of the tasks are laid out in a group on Vkontakte , where you can try to solve and discuss them. There is also a bot in Telegram - there you can also practice solving problems.



All those who successfully completed the online stage are invited to face-to-face meetings with curators in the office.



The meetings took place in different formats: they gave tasks on logic, a programming language, asked about preferences in technologies and about everything that interests you in the IT world.



After some time, those who were accepted for the program received an invitation with the terms of the program. And it's not just about money. Interns dine for free at Tinkoff Cafe and go to the fitness room in the office. Corporate discounts and offers from company partners also apply to us.



1299 people participated in the selection, of which 412 were invited to the final stage, 98 received invitations to the program. The final competition - more than 13 people per place.



First impression



On the first day, the organizers conduct a familiarization lecture, after which the interns disperse according to their commands.







They are already waiting for a laptop, monitor, mouse and internal phone. If desired, you can request any necessary equipment.



For example, we asked for an additional monitor, mouse pad, headphones and a headset.



Once you have settled in a new place, the curators talk about their teams and projects. By the way, we were immediately given "combat" tasks.



Each of the co-authors of the article recently completed his participation in the Tinkoff Internship program and will tell about his experience.



Vitya . Direction - Analytics



I was involved in improving the pricing of insurance policies.



The mentor had the idea that, having analyzed the market, we will be able to introduce a new parameter into the price model, which will ultimately increase profits. To do this, it was necessary to collect the available data, obtain information about the market, conduct the final analytics and find out whether the new parameter is useful.



At the beginning, the most difficult thing was to get comfortable with SQL and the Pandas library for working with data, since before that I had not used them much. I wrote scripts for a week to get and store market data.



In parallel, the elasticity test worked, where we changed our prices and looked at the conversion - the probability of buying a policy. Using the data from this test, we were able to build a model that predicts conversion at our price and policy fields, and a new parameter increased the quality of the model.



image






ROC curve of the model. The larger the area under the graph, the better the model



It has been taking too long to get market data every time a user visits, so we tried to predict a new parameter - and at first we managed to do it well. But from some point the model on the updated data began to learn worse and make more mistakes.



It turned out that the reason for this was a sharp “drawdown” in the ruble exchange rate against major currencies, therefore, according to one set of parameters, it had to give different answers, which, of course, the model could not do. The logical decision was to add the exchange rate to the model.



It already seemed that we have a good conversion model. Having fixed the remaining parameters for a specific policy, we can change our price and, using the predicted conversion, get the point of maximum expected profit. But it turned out that the model poorly reflects the dynamics of conversion changes from price changes and, as a result, raising the price as much as possible becomes the most winning strategy. I think if we conduct more subtle tests of price changes, we can get rid of this problem and introduce this pricing model.



In the future, we want to create a full-fledged RL agent that can adapt to changing environmental conditions and maximize profits. To get acquainted with SQL, I recommend solving SQL problems and watching the necessary theory in parallel. As for the Pandas library, there is a great example of using Pandas in House Prices .



Maxim . Direction - Android Development



I was developing a mobile CRM system that allows owners of small and medium-sized businesses to more effectively manage their product.



I was lucky with the team: there was complete freedom of action, and the development is full of experiments and unusual solutions. Every day I sank deeper into the project and a month after fixing small bugs and writing autotests, I started developing features. In addition, they allowed me to participate in almost all product development processes: I attended meetings with clients, listened to their wishes and suggestions. Each of the team members could contribute something new to the project, offer their ideas.



I managed to solve several important technical problems, including navigation through the application. We did not want to get involved in libraries, so it was decided to write our own router. “Under the hood”, it contains several optimizations that allow you to more efficiently execute transactions on fragments in time and memory.



Also, once we noticed a rather large memory leak, which led to the crash of the application on weak devices. After looking at the logs in LeakCanary , we saw that the standard Google Snackbar is to blame. We decided to rewrite it and improve it a bit, as a result, there were no more leaks.



Another problem for us was the weight of the application: we noticed that at some point it began to weigh almost three times as much. After analyzing apk through apkanalyzer



, we saw that the whole thing is in native libraries: the application is built for all types of processors , which is why one .so



file can increase the weight of the application not by 2.5 MB, but by 12 MB. To avoid this, we decided to split the final apk into each type of processor. Thus, we got four release builds instead of one, but they weighed about 2.5 times less.



We wrote an Android application using our own architecture , which at first was completely unusual for me, but after a while I got used to it, and even accepted it as my main one, because it seemed to me the most natural for writing software.

All this time, my curator was in touch with me, he was a team leader who answered all my questions 24/7 and mercilessly revised my pull requests :).



During the program, I was able to make some contribution to the development of Fintech School - I helped to build the process of recording the lecture runs so that in the future it would be easier to scale and lecturers from other cities could understand what the presentation was about. I also helped with conveying information to students, as I understood what they might have difficulties with perception of.



It is worth considering that at the time of Tinkoff Internship I already had some development experience. However, not only experience is appreciated here, but also the ability to quickly understand complex things. For this, it seems to me, it is worthwhile to devote time to the algorithmic problems that develop abstract thinking. I highly recommend solving problems on leetcode .



Also, do not forget about the technical literature and generally be aware of what is happening in the world of mobile development. To do this, there is a gorgeous resource with thousands of useful articles on how to write code.



Android learners would be advised to read the following books:





Reading books and solving problems will only be beneficial if you put new knowledge into practice every day. Therefore, I recommend that you come up with some idea for your project - for example, write a simple messenger, a music player, a gallery for viewing photos - and start implementing this whole thing. Believe in yourself, read a lot, write the code every day - and then you will succeed!



Masha . Direction - Analytics



I went through Internship at Tinkoff twice in the Process Mining team, which analyzes business processes in the company. Analysis of business processes allows you to see how the process actually works, how close it is to the "ideal" and where its bottlenecks are.



Since the company’s team is young, it was easy enough to find a common language. Everyone turns to each other on you, the hierarchy of employees does not manifest itself in communication. The first time my team had three interns, we all engaged in different tasks with different mentors. It was also possible to change the task during the program. But I liked mine from the very beginning.



I mainly engaged in the analysis of the processing of requests from employees and customers of Tinkoff.ru. My task had two parts: preparing the required data model using SQL (the basic commands and rules of the language can be found on this resource) and building analytics based on this data.



First time I participated in a part-time program, 20 hours a week. My main task was to add SLA compliance information - a service level agreement - to the existing process analysis option. It took some time to get acquainted with the infrastructure of the company and the tools with which the data were uploaded and processed. As a result, I added two new dashboards with analytics to the current analysis of the business process.



The second time I faced a more difficult task - to collect previously unused data from the storage in a certain form and make new analytics on it. By the way, in the book of V. Savelyev “ Statistics and seals ” the basic statistical characteristics and methods of their application are described in simple language.



Several times I went to a meeting with the customer, where we discussed the requirements and current developments. It was originally planned that my result would be three additional pages with analytics, but during the discussions we came to the conclusion that a completely new version of the report should be made. When all the data was collected and the dashboards were ready, I launched a new project on the test group. A week later, I collected feedback from them and made some improvements. By the end of the program, my report was available to all employees of the company.



Kolya . Direction - ML



As part of the Tinkoff Internship, I got into the speech technology team .



At the second stage of the selection, I met Nastya, my future curator, and Vadim - our product manager. Nastya gave several algorithmic problems, and Vadim talked about working on a voice assistant, robots and call center analytics. Contrary to popular belief, we are not only responsible for the voice and ears of Oleg’s voice assistant. We have many other interesting tasks for integrating voice technologies for various clients. After Tinkoff Internship I stayed in the team, now we are looking for both professionals and motivated beginners.



During the program, I was engaged in optimizing inference . The fact is, the interference of neural networks quite often comes down to operations with dense matrices. At the same time, for autoregressive models, for example, for WaveNet , it is more profitable to execute it on the CPU so that more simultaneous inference flows can be supported.



However, the performance of the “naive” implementation of matrix multiplication with automatic optimization by means of the compiler rarely reaches 10% of the maximum possible for a single CPU. For greater performance, you need to use finer optimization. There are many different approaches to optimizing matrix multiplications for the inference of neural networks on the CPU. Nastya had serious developments on this issue, but I had to collect all of them into a single GEMM library in C ++. Such libraries are used in popular frameworks: in TensorFlow it is Eigen, in PyTorch it is FBGEMM.



In addition to Register Blocking, Cache Blocking, and SIMD processor extensions, the library actively uses C ++ features: static polymorphism (CRTP) and code generation at the compilation stage. Fun fact: at some point, I had to switch briefly from optimizing matrix multiplications to optimizing compilation of code using the library. As a result, our library overtakes Eigen (repeatedly) and FBGEMM on most tests. Further work will be aimed at introducing the library into our inference engine.





One of FBGEMM Standard Benchmarks: Matrix Product

[M × 512] and [512 × 512]



Summary



Tinkoff Internship left us with only positive impressions. It's cool that we are considered full-fledged team members, they give real tasks and allow us to solve them on our own. If difficulties arise, mentors help, but do not just voice advice, but give you the opportunity to find a solution yourself.



Solving problems with people who are not deprived of a sense of humor, who can professionally manage and write cool code, always gives an excellent chance to develop their hard and soft skills, gain experience and begin their work in IT.







A new set is now open at Tinkoff Internship - you can sign up and take exams until December 8 at fintech.tinkoff.ru/internships/about



All Articles